Wie kann man den ersten Buchstaben eines Strings in Java groß schreiben?


305

Ich benutze Java, um eine StringEingabe vom Benutzer zu erhalten. Ich versuche, den ersten Buchstaben dieser Eingabe groß zu schreiben.

Ich habe es versucht:

String name;

BufferedReader br = new InputStreamReader(System.in);

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

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

was zu diesen Compilerfehlern führte:

  • Typkonflikt: Konvertiert nicht von InputStreamReader in BufferedReader

  • ToUppercase () kann für den primitiven Typ char nicht aufgerufen werden


2
@ Pontus - Ich bin anderer Meinung. Für die Eingabe "abcd" möchte das OP die Ausgabe "Abcd". Es scheint ziemlich klar zu sein, obwohl die Frage besser hätte sein können.
Kobi


Zeichen ist ein primitiver Datentyp in Java. Sie können einen primitiven Datentyp nicht mit dem Operator dot (.) Dereferenzieren. Sie müssen das erste Zeichen mit name.substring (0,1) unterteilen.
Divakar Rajesh

Antworten:


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

Mit Ihrem Beispiel:

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
Ich denke, Sie brauchen -1 nach str.length (), sonst gehen Sie aus dem Rahmen.
Dutt

@dutt: Nein eigentlich war das auch vollkommen in Ordnung. Aber Rekins Modifikation machte es perfekt. ;)
Adeel Ansari

commons lang ist immer besser als das Schreiben einer eigenen Funktion, außer in seltenen Fällen, in denen Sie es besser wissen. Wenn Sie das Commons Lang Java-Dokument zur Großschreibungsfunktion nicht gelesen haben, sollten Sie kein eigenes schreiben.
The.Laughing.Man

211

Ich habe WordUtils verwendet, es hat auch die gleiche Funktion, aber es werden Großbuchstaben aller Wörter in einem Satz großgeschrieben.
Surbhit Rao

StringUtils.capitalize( "fred from jupiter" );produziert "Fred from jupiter". Einfach ...: D
Udoline

WordUtils.capitalizeFully () arbeitete für mich wie ein Zauber, wie es gibt: WordUtils.capitalizeFully ("Ich bin in Ordnung") = "Mir geht es gut"
Atul Sharma

91

Der kürzere / schnellere Versionscode zum Großschreiben des ersten Buchstabens eines Strings lautet:

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

der Wert von nameist"Stackoverflow"


4
Ich mag diese Lösung, weil sie sicherstellt, dass der Rest der Zeichenfolge in Kleinbuchstaben geschrieben ist. Das brauchte ich beim Konvertieren von ALL_CAPS-Aufzählungsnamen.
Ellen Spertus

54

Verwenden Sie die allgemeine Bibliothek von Apache. Befreien Sie Ihr Gehirn von diesen Dingen und vermeiden Sie Null Pointer & Index Out of Bound Exceptions

Schritt 1:

Importieren Sie die allgemeine Lang-Bibliothek von Apache, indem Sie diese in build.gradleAbhängigkeiten einfügen

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

Schritt 2:

Wenn Sie sicher sind, dass Ihre Zeichenfolge nur in Kleinbuchstaben geschrieben ist oder Sie nur den ersten Buchstaben initialisieren müssen, rufen Sie direkt an

StringUtils.capitalize(yourString);

Wenn Sie sicherstellen möchten, dass nur der erste Buchstabe groß geschrieben wird, wie dies für a der Fall ist enum, rufen Sie toLowerCase()zuerst auf und denken Sie daran, dass er ausgelöst wird, NullPointerExceptionwenn die Eingabezeichenfolge null ist.

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

Hier finden Sie weitere Beispiele von Apache. Es ist ausnahmefrei

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

Hinweis:

WordUtilsist ebenfalls in dieser Bibliothek enthalten, aber veraltet. Bitte benutzen Sie das nicht .


2
Vielen Dank. Ich kann nicht glauben, dass die Leute überhaupt daran denken, eine for-Schleife für diese Art von Aufgabe zu verwenden
Alvaro,

@Alvaro, am Ende des Tages - Leute verwenden Schleife für diese Aufgabe, überprüfen Sie den Apache-Quellcode. Dies bedeutet jedoch nicht, dass Menschen keine gut getesteten Lösungen verwenden sollten.
Yuriy Chernyshov

@YuriyChernyshov sicher, ich meinte, dass sie das Rad für den Produktionscode größtenteils nicht neu erfinden sollten
Alvaro

WordUtils.capitalizeFully () arbeitete für mich wie ein Zauber, wie es gibt: WordUtils.capitalizeFully ("Ich bin in Ordnung") = "Mir geht es gut"
Atul Sharma

Ich werde niemals für externe Bibliotheken gehen, nur für kleine Zwecke wie How to capitalize the first letter of a String in Java?.
Stapelüberlauf

25

Java:

einfach eine Hilfsmethode zum Großschreiben jeder Zeichenfolge.

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

Danach einfach anrufen str = capitalize(str)


Kotlin:

str.capitalize()

Es wird eine Ausnahme ausgelöst, wenn die strNull ist. Überprüfen Sie, ob die Zeichenfolge nicht null ist und mindestens ein Zeichen enthält, bevor Sie diese verwenden.
Attacomsian

@attacomsian Sie haben Recht, ich aktualisiere Java-Code und für Kotlin können Sie str? .capitalize ()
Amir Hossein Ghasemi

22

Was Sie tun möchten, ist wahrscheinlich Folgendes:

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

(konvertiert das erste Zeichen in Großbuchstaben und fügt den Rest der ursprünglichen Zeichenfolge hinzu)

Außerdem erstellen Sie einen Eingabestream-Reader, lesen jedoch niemals eine Zeile. So namewird es immer seinnull .

Das sollte funktionieren:

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


12

Die folgende Lösung wird funktionieren.

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

Sie können toUpperCase () nicht für primitive Zeichen verwenden, aber Sie können zuerst den gesamten String in Großbuchstaben schreiben, dann das erste Zeichen nehmen und dann wie oben gezeigt an den Teilstring anhängen.


toUpperCase ist fraglich eingeschränkt.
Harpreet Sandhu - TheRootCoder

In Frage, er hat versucht, auf einem primitiven toCpperCase, der nicht funktioniert.
Jijil Kakkadathu

1
Oh. Ich habe das Ding verpasst. (y)
Harpreet Sandhu - TheRootCoder

1
große Antwort lieber
Dulaj Kulathunga


7

Am kürzesten auch:

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

Hat für mich gearbeitet.


6

Setzen Sie die Zeichenfolge auf Kleinbuchstaben und dann den ersten Buchstaben wie folgt auf Großbuchstaben:

    userName = userName.toLowerCase();

dann, um den ersten Buchstaben groß zu schreiben:

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

Teilzeichenfolge bekommt nur ein Stück einer größeren Zeichenfolge, dann kombinieren wir sie wieder zusammen.


7
Wie ich es bekomme, ist die erste Codezeile nutzlos, da der Rest der Zeichenfolge so oder so auf Kleinbuchstaben gesetzt ist.
Håvard Nygård

6

Was ist mit WordUtils.capitalizeFully () ?

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

Verwenden Sie diese Dienstprogrammmethode, um alle Anfangsbuchstaben in Großbuchstaben zu erhalten.

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

Sie können dies auch versuchen:

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

Dies ist besser (optimiert) als bei Verwendung von Teilzeichenfolgen. (aber keine Sorge um kleine Schnur)


4

Sie können substring()dies verwenden.

Es gibt jedoch zwei verschiedene Fälle:

Fall 1

Wenn das, was StringSie großschreiben, für Menschen lesbar sein soll, sollten Sie auch das Standardgebietsschema angeben:

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

Fall 2

Wenn die StringGroßschreibung maschinenlesbar sein soll, vermeiden Sie die Verwendung, Locale.getDefault()da die zurückgegebene Zeichenfolge in verschiedenen Regionen inkonsistent ist. Geben Sie in diesem Fall immer dasselbe Gebietsschema an (z. B.toUpperCase(Locale.ENGLISH) ). Dadurch wird sichergestellt, dass die Zeichenfolgen, die Sie für die interne Verarbeitung verwenden, konsistent sind, wodurch Sie schwer zu findende Fehler vermeiden können.

Hinweis: Sie müssen nicht angeben müssen Locale.getDefault()für toLowerCase(), da dies automatisch geschieht.


4

In Android Studio

Fügen Sie diese Abhängigkeit zu Ihrem hinzu build.gradle (Module: app)

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

Jetzt können Sie verwenden

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

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

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

4

Wenn Sie SPRING verwenden :

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


    return capitalize(name);

HINWEIS: Wenn Sie bereits eine Apache Common Lang-Abhängigkeit haben, sollten Sie die Verwendung von StringUtils.capitalize in Betracht ziehen, wie andere Antworten vorschlagen.

UMSETZUNG: https://github.com/spring-projects/spring-framework/blob/64440a5f04a17b3728234afaa89f57766768decb/spring-core/src/main/java/org/springframework/util/StringUtils.java5

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


4

ES WIRD 101% ARBEITEN

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

Dies soll Ihnen nur zeigen, dass Sie nicht so falsch lagen.

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));

Hinweis: Dies ist überhaupt nicht der beste Weg, dies zu tun. Dies soll nur dem OP zeigen, dass es auch mit verwendet werden kann charAt(). ;)


1
+1 für "nicht so falsch". Ich würde es vorziehen, Character.toString(name.charAt(0)) anstatt ""+name.charAt(0)zu zeigen, was ich wirklich tun möchte.
user85421

Keine Nulllängenprüfungen. Die Länge könnte Null sein.
Chrispix

3

Das wird funktionieren

char[] array = value.toCharArray();

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

String result = new String(array);

3

Sie können den folgenden Code verwenden:

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

Probier diese

Diese Methode bewirkt Folgendes: Betrachten Sie das Wort "Hallo Welt". Verwandeln Sie diese Methode in "Hallo Welt" und schreiben Sie den Anfang jedes Wortes groß.

 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();

    }

Aber dieser Code scheint ziemlich verständlich zu sein. Alle Methoden sind auch unter ihrem Namen leicht zu verstehen. Aber danke für deinen Kommentar, werde versuchen, ab dem nächsten Mal perfekter zu werden, ich werde irgendwann zu faul :-).
Ameen Maheen

Klappt wunderbar!
TheVinceble

3

Bei gegebenen Antworten wird nur der erste Buchstabe eines Wortes groß geschrieben. Verwenden Sie den folgenden Code, um eine ganze Zeichenfolge groß zu schreiben.

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());
}

Ausgabe : This Is A Random String


3

Wenn Input UpperCase ist, verwenden Sie Folgendes:

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

Wenn Input LowerCase ist, verwenden Sie Folgendes:

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

Sie können den folgenden Code verwenden:

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);

}

Beispieltest mit JUnit:

@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

Mit commons.lang.StringUtilsder besten Antwort ist:

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;  
}

Ich finde es brillant, da es den String mit einem StringBuffer umschließt. Sie können den StringBuffer beliebig bearbeiten und dabei dieselbe Instanz verwenden.


2

Ein weiteres Beispiel, wie Sie den ersten Buchstaben der Benutzereingabe groß schreiben können:

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)));
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.