Java'da bir String'in ilk harfini nasıl büyük yazılır?


305

StringKullanıcıdan bir girdi almak için Java kullanıyorum . Bu girdinin ilk harfini büyük harfle yazmaya çalışıyorum.

Bunu denedim:

String name;

BufferedReader br = new InputStreamReader(System.in);

String s1 = name.charAt(0).toUppercase());

System.out.println(s1 + name.substring(1));

Bu da derleyici hatalarına neden oldu:

  • Tür uyuşmazlığı: InputStreamReader'dan BufferedReader'a dönüştürülemiyor

  • Ilkel tip karakterde Uppercase () işlevini çağıramıyorum


2
@Pontus - Kabul etmiyorum. "Abcd" girişi için OP "Abcd" çıkışını ister. Soru daha iyi olsa da oldukça açık görünüyor.
Kobi


karakter Java'da ilkel bir veri türüdür. Nokta (.) İşleci ile ilkel veri türünü kaldıramazsınız. İlk karakteri name.substring (0,1);
Divakar Rajesh

Yanıtlar:


397
String str = "java";
String cap = str.substring(0, 1).toUpperCase() + str.substring(1);
// cap = "Java"

Örneğinizle:

public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    // Actually use the Reader
    String name = br.readLine();
    // Don't mistake String object with a Character object
    String s1 = name.substring(0, 1).toUpperCase();
    String nameCapitalized = s1 + name.substring(1);
    System.out.println(nameCapitalized);
}

1
Sanırım str.length () 'den sonra -1'e ihtiyacınız var, aksi takdirde sınırların dışına çıkacaksınız.
dutt

@dutt: Hayır aslında, bu da gayet iyiydi. Ancak Rekin'in modifikasyonu onu mükemmelleştirdi. ;)
Adeel Ansari

commons lang, daha iyi bildiğiniz nadir durumlar dışında, kendi işlevinizi yazmaktan her zaman daha iyidir. Eğer büyük harf işlevi hakkında ortak dil lang java doc okumak gitmediyseniz, kendi yazmamanız gerekir.
The.Laughing.Man

211

Ben de aynı işleve sahip WordUtils kullanıyordum ama bir cümlede tüm kelimelerin ilk harflerini büyük yazıyor.
Surbhit Rao

StringUtils.capitalize( "fred from jupiter" );üretir "Fred from jupiter". Kolay ...: D
Udoline

WordUtils.capitalizeFully () bana olduğu gibi cazibe gibi çalıştı: WordUtils.capitalizeFully ("i am FINE") = "İyiyim"
Atul Sharma

91

Bir String'in ilk harfini büyük yapmak için daha kısa / daha hızlı sürüm kodu:

String name  = "stackoverflow"; 
name = name.substring(0,1).toUpperCase() + name.substring(1).toLowerCase();

değeri nameIS"Stackoverflow"


4
Bu çözümü seviyorum çünkü dize geri kalanı küçük harf olduğundan emin olur. ALL_CAPS numaralandırma adlarından dönüştürürken buna ihtiyacım vardı.
Ellen Spertus

54

Apache'nin ortak kütüphanesini kullanın. Beyninizi bu eşyalardan kurtarın ve Boş İşaretçi ve Dizinden Sınır Dışı İstisnalardan kaçının

Aşama 1:

build.gradleBağımlılığa koyarak apache'nin ortak dil kütüphanesini içe aktarın

compile 'org.apache.commons:commons-lang3:3.6'

Adım 2:

Dizenizin tamamen küçük olduğundan eminseniz veya tek yapmanız gereken ilk harfi başlatmaktır, doğrudan arayın

StringUtils.capitalize(yourString);

Yalnızca ilk harfin büyük yazıldığından emin olmak istiyorsanız, bunu bir an için yaptığınız gibi enum, toLowerCase()önce arayın ve NullPointerExceptiongiriş dizesinin boş olması durumunda atılacağını unutmayın.

StringUtils.capitalize(YourEnum.STUFF.name().toLowerCase());
StringUtils.capitalize(yourString.toLowerCase());

Apache tarafından sağlanan daha fazla örnek. istisna ücretsiz

StringUtils.capitalize(null)  = null
StringUtils.capitalize("")    = ""
StringUtils.capitalize("cat") = "Cat"
StringUtils.capitalize("cAt") = "CAt"
StringUtils.capitalize("'cat'") = "'cat'"

Not:

WordUtilsbu kitaplığa da dahil edilmiştir, ancak kullanımdan kaldırılmıştır. Lütfen bunu kullanmayın.


2
Teşekkürler. İnsanların bu tür bir görev için bir for döngüsü kullanmayı düşündüklerine bile inanamıyorum
Alvaro

@Alvaro, günün sonunda - insanlar bu görev için döngü kullanıyorlar, apache kaynak kodunu kontrol edin. Bu, insanların iyi test edilmiş çözümler kullanmaması gerektiği anlamına gelmez.
Yuriy Chernyshov

@YuriyChernyshov, eminim, çoğunlukla üretim kodu için tekerleği yeniden icat etmemeleri gerekiyordu
Alvaro

WordUtils.capitalizeFully () bana olduğu gibi cazibe gibi çalıştı: WordUtils.capitalizeFully ("i am FINE") = "İyiyim"
Atul Sharma

Dış kütüphanelere asla küçük bir amaç için gitmeyeceğim How to capitalize the first letter of a String in Java?.
Stack Overflow

25

Java:

her dizeyi büyük harfle yazmak için yardımcı bir yöntemdir.

public static String capitalize(String str)
{
    if(str == null) return str;
    return str.substring(0, 1).toUpperCase() + str.substring(1);
}

Bundan sonra sadece str = capitalize(str)


Kotlin:

str.capitalize()

strBoş ise bir istisna atar . Bunu kullanmadan önce dizenin boş olmadığından ve en az bir karaktere sahip olduğundan emin olun.
attacomsian

@attacomsian haklısın, java kodunu güncelliyorum ve Kotlin için str? .capitalize () kullanabilirsiniz
Amir Hossein Ghasemi

22

Yapmak istediğiniz şey muhtemelen şudur:

s1 = name.substring(0, 1).toUpperCase() + name.substring(1);

(ilk karakteri büyük harfe dönüştürür ve orijinal dizenin kalanını ekler)

Ayrıca, bir giriş akışı okuyucu oluşturursunuz, ancak hiçbir satır okumazsınız. Böylece nameher zaman olacak null.

Bu çalışmalı:

BufferedReader br = new InputstreamReader(System.in);
String name = br.readLine();
String s1 = name.substring(0, 1).toUpperCase() + name.substring(1);


12

Aşağıdaki çözüm işe yarayacaktır.

String A = "stackOverflow";
String ACaps = A.toUpperCase().charAt(0)+A.substring(1,A.length());
//Will print StackOverflow

İlkel karakterde toUpperCase () yöntemini kullanamazsınız, ancak ilk önce Büyük Harfe kadar tüm Dizeyi yapabilir, sonra ilk karakteri alabilir, sonra yukarıda gösterildiği gibi alt dizeye ekleyebilirsiniz.


toUpperCase söz konusu olduğunda kısıtlanmıştır.
Harpreet Sandhu - TheRootCoder

Söz konusu olduğunda, işe yaramayacak ilkel üzerinde topper üstü çalışmaya çalışıyordu.
Jijil Kakkadathu

1
ah. O şeyi özledim. (y)
Harpreet Sandhu - TheRootCoder

1
büyük cevap sevgili
Dulaj Kulathunga


7

En kısa:

String message = "my message";    
message = Character.toUpperCase(message.charAt(0)) + message.substring(1);
System.out.println(message)    // Will output: My message

Benim için çalıştı.


6

Dizeyi küçük harfe ayarlayın, ardından ilk Harfi şu şekilde büyük olarak ayarlayın:

    userName = userName.toLowerCase();

daha sonra ilk harfi büyük yapmak için:

    userName = userName.substring(0, 1).toUpperCase() + userName.substring(1).toLowerCase();

substring sadece daha büyük bir dizenin bir parçasını alıyor, o zaman onları tekrar birleştiriyoruz.


7
Nasıl elde ederim, ilk kod satırı, dize geri kalanı her iki şekilde de küçük harfe ayarlandığı için işe yaramaz.
Håvard Nygård

6

WordUtils.capitalizeFully () hakkında ne dersiniz ?

import org.apache.commons.lang3.text.WordUtils;

public class Main {

    public static void main(String[] args) {

        final String str1 = "HELLO WORLD";
        System.out.println(capitalizeFirstLetter(str1)); // output: Hello World

        final String str2 = "Hello WORLD";
        System.out.println(capitalizeFirstLetter(str2)); // output: Hello World

        final String str3 = "hello world";
        System.out.println(capitalizeFirstLetter(str3)); // output: Hello World

        final String str4 = "heLLo wORld";
        System.out.println(capitalizeFirstLetter(str4)); // output: Hello World
    }

    private static String capitalizeFirstLetter(String str) {
        return WordUtils.capitalizeFully(str);
    }
}

6

Tüm ilk harfleri büyük harfle almak için bu yardımcı yöntemi kullanın.

String captializeAllFirstLetter(String name) 
{
    char[] array = name.toCharArray();
    array[0] = Character.toUpperCase(array[0]);

    for (int i = 1; i < array.length; i++) {
        if (Character.isWhitespace(array[i - 1])) {
            array[i] = Character.toUpperCase(array[i]);
        }
    }

    return new String(array);
}

5
String str1 = "hello";
str1.substring(0, 1).toUpperCase()+str1.substring(1);

4

Bunu da deneyebilirsiniz:

 String s1 = br.readLine();
 char[] chars = s1.toCharArray();
 chars[0] = Character.toUpperCase(chars[0]);
 s1= new String(chars);
 System.out.println(s1);

Bu, alt dize kullanmaktan daha iyidir (optimize edilmiştir). (ancak küçük dize için endişelenmeyin)


4

Bunu substring()yapmak için kullanabilirsiniz .

Ancak iki farklı durum vardır:

Dava 1

Büyük / Stringküçük harf kullanımınızın insan tarafından okunabilir olması gerekiyorsa, varsayılan yerel ayarı da belirtmelisiniz:

String firstLetterCapitalized = 
    myString.substring(0, 1).toUpperCase(Locale.getDefault()) + myString.substring(1);

Durum 2

Büyük / Stringküçük harf kullanmanın makine tarafından okunabilir Locale.getDefault()olması gerekiyorsa, döndürülen dize farklı bölgelerde tutarsız olacağından kullanmaktan kaçının ve bu durumda her zaman aynı yerel ayarı belirtin (örneğin, toUpperCase(Locale.ENGLISH)). Bu, dahili işlem için kullandığınız dizelerin tutarlı olmasını sağlar ve bu da bulunması zor hatalardan kaçınmanıza yardımcı olur.

Not: belirtmek gerekmez Locale.getDefault()için toLowerCase()bu otomatik olarak yapılmış olduğu.


4

Android Studio'da

Bu bağımlılığı build.gradle (Module: app)

dependencies {
    ...
    compile 'org.apache.commons:commons-lang3:3.1'
    ...
}

Şimdi kullanabilirsiniz

String string = "STRING WITH ALL CAPPS AND SPACES";

string = string.toLowerCase(); // Make all lowercase if you have caps

someTextView.setText(WordUtils.capitalize(string));

4

Eğer kullanırsanız YAY :

import static org.springframework.util.StringUtils.capitalize;
...


    return capitalize(name);

NOT: Zaten Apache Common Lang bağımlılığınız varsa, diğer yanıtların önerdiği gibi StringUtils.capitalize komutunu kullanmayı düşünün.

UYGULAMA: https://github.com/spring-projects/spring-framework/blob/64440a5f04a17b3728234afaa89f57766768decb/spring-core/src/main/java/org/springframework/util/StringUtils.java#L35-5

REF: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/util/StringUtils.html#capitalize-java.lang.String-


4

% 101 ÇALIŞACAK

public class UpperCase {

    public static void main(String [] args) {

        String name;

        System.out.print("INPUT: ");
        Scanner scan = new Scanner(System.in);
        name  = scan.next();

        String upperCase = name.substring(0, 1).toUpperCase() + name.substring(1);
        System.out.println("OUTPUT: " + upperCase); 

    }

}

3

Bu sadece size o kadar da yanlış olmadığınızı göstermek içindir.

BufferedReader br = new InputstreamReader(System.in);
// Assuming name is not blank
String name = br.readLine(); 

//No more error telling that you cant convert char to string
String s1 = (""+name.charAt(0)).toUppercase());
// Or, as Carlos prefers. See the comments to this post.
String s1 = Character.toString(name.charAt(0)).toUppercase());

System.out.println(s1+name.substring(1));

Not: Bu, bunu yapmanın en iyi yolu değildir. Bu sadece OP'nin de kullanılarak yapılabileceğini charAt()göstermek içindir. ;)


1
+1 "yanlış değil" için. Ben ediyorum tercih Character.toString(name.charAt(0)) yerine ""+name.charAt(0)gerçekten ne yapmak istediğinizi göstermek için.
user85421

Boş uzunluk kontrolü yok .. Uzunluk sıfır olabilir.
Chrispix

3

Bu çalışacak

char[] array = value.toCharArray();

array[0] = Character.toUpperCase(array[0]);

String result = new String(array);

3

Aşağıdaki kodu kullanabilirsiniz:

public static void main(String[] args) {

    capitalizeFirstLetter("java");
    capitalizeFirstLetter("java developer");
}

public static void capitalizeFirstLetter(String text) {

    StringBuilder str = new StringBuilder();

    String[] tokens = text.split("\\s");// Can be space,comma or hyphen

    for (String token : tokens) {
        str.append(Character.toUpperCase(token.charAt(0))).append(token.substring(1)).append(" ");
    }
    str.toString().trim(); // Trim trailing space

    System.out.println(str);

}

3

bunu dene

Bu yöntemin yaptığı, "merhaba dünya" kelimesini düşünün, bu yöntem "Merhaba Dünya" haline dönüştürmek her kelimenin başını büyük harfle.

 private String capitalizer(String word){

        String[] words = word.split(" ");
        StringBuilder sb = new StringBuilder();
        if (words[0].length() > 0) {
            sb.append(Character.toUpperCase(words[0].charAt(0)) + words[0].subSequence(1, words[0].length()).toString().toLowerCase());
            for (int i = 1; i < words.length; i++) {
                sb.append(" ");
                sb.append(Character.toUpperCase(words[i].charAt(0)) + words[i].subSequence(1, words[i].length()).toString().toLowerCase());
            }
        }
        return  sb.toString();

    }

Ama bu kod hemen hemen anlaşılabilir görünüyor, Tüm yöntemler isimleri tarafından da anlaşılması kolaydır.
Ameen Maheen

Tıkır tıkır çalışıyor!
TheVinceble

3

Verilen cevaplar sadece bir kelimenin ilk harfini büyük yapmak içindir. dizenin tamamını büyük harf yapmak için aşağıdaki kodu kullanın.

public static void main(String[] args) {
    String str = "this is a random string";
    StringBuilder capitalizedString = new StringBuilder();
    String[] splited = str.trim().split("\\s+");

    for (String string : splited) {         
        String s1 = string.substring(0, 1).toUpperCase();
        String nameCapitalized = s1 + string.substring(1);

        capitalizedString.append(nameCapitalized);
        capitalizedString.append(" ");
    }
    System.out.println(capitalizedString.toString().trim());
}

çıktı : This Is A Random String


3

Giriş UpperCase ise, Aşağıdakileri kullanın:

str.substring (0, 1). toUpperCase () + str.substring (1) .toLowerCase ();

Giriş LowerCase ise, Aşağıdakileri kullanın:

str.substring (0, 1). toUpperCase () + str.substring (1);



2
public static String capitalizer(final String texto) {

    // split words
    String[] palavras = texto.split(" ");
    StringBuilder sb = new StringBuilder();

    // list of word exceptions
    List<String> excessoes = new ArrayList<String>(Arrays.asList("de", "da", "das", "do", "dos", "na", "nas", "no", "nos", "a", "e", "o", "em", "com"));

    for (String palavra : palavras) {

        if (excessoes.contains(palavra.toLowerCase()))
            sb.append(palavra.toLowerCase()).append(" ");
        else
            sb.append(Character.toUpperCase(palavra.charAt(0))).append(palavra.substring(1).toLowerCase()).append(" ");
    }
    return sb.toString().trim();
}

2

Aşağıdaki kodu kullanabilirsiniz:

public static String capitalizeString(String string) {

    if (string == null || string.trim().isEmpty()) {
        return string;
    }
    char c[] = string.trim().toLowerCase().toCharArray();
    c[0] = Character.toUpperCase(c[0]);

    return new String(c);

}

JUnit ile örnek test:

@Test
public void capitalizeStringUpperCaseTest() {

    String string = "HELLO WORLD  ";

    string = capitalizeString(string);

    assertThat(string, is("Hello world"));
}

@Test
public void capitalizeStringLowerCaseTest() {

    String string = "hello world  ";

    string = capitalizeString(string);

    assertThat(string, is("Hello world"));
}

2

commons.lang.StringUtilsEn iyi cevabı kullanmak :

public static String capitalize(String str) {  
    int strLen;  
    return str != null && (strLen = str.length()) != 0 ? (new StringBuffer(strLen)).append(Character.toTitleCase(str.charAt(0))).append(str.substring(1)).toString() : str;  
}

StringBuffer ile dize sarar çünkü parlak buluyorum. StringBuffer'ı istediğiniz gibi ve aynı örneği kullanarak değiştirebilirsiniz.


2

Yine başka bir örnek olarak, kullanıcı girişinin ilk harfini nasıl büyük harfle yazabilirsiniz:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String string = br.readLine();
// handle supplementary characters
IntStream.concat(
        IntStream.of(string.codePointAt(0))
                .map(Character::toUpperCase), string.codePoints().skip(1)
)
.forEach(cp -> System.out.print(Character.toChars(cp)));
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.