Come scrivere in maiuscolo la prima lettera di una stringa in Java?


305

Sto usando Java per ottenere un Stringinput dall'utente. Sto cercando di rendere maiuscola la prima lettera di questo input.

Ho provato questo:

String name;

BufferedReader br = new InputStreamReader(System.in);

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

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

che ha portato a questi errori del compilatore:

  • Tipo non corrispondente: impossibile convertire da InputStreamReader a BufferedReader

  • Impossibile richiamare toUppercase () sul carattere di tipo primitivo


2
@Pontus - Non sono d'accordo. Per l'ingresso "abcd", l'OP vuole l'uscita "Abcd". Sembra abbastanza chiaro, anche se la domanda avrebbe potuto essere migliore.
Kobi,


carattere è un tipo di dati primitivo in Java. Non è possibile sottovalutare un tipo di dati primitivo con l'operatore punto (.). Devi sottostringa del primo carattere con name.substring (0,1);
Divakar Rajesh,

Risposte:


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

Con il tuo esempio:

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
Penso che tu abbia bisogno di -1 dopo str.length (), altrimenti andrai fuori dai limiti.
Dutt,

@dutt: No davvero, anche quello andava benissimo. Ma la modifica di Rekin l'ha resa perfetta. ;)
Adeel Ansari,

commons lang è sempre meglio che scrivere la propria funzione, tranne in rari casi in cui si conosce meglio. Se non sei andato a leggere il documento comune di java java sulla funzione maiuscola, non dovresti scrivere il tuo.
The.Laughing.Man

211

Stavo usando WordUtils ha anche la stessa funzione, ma maiuscolo le prime lettere di tutte le parole in una frase.
Surbhit Rao,

StringUtils.capitalize( "fred from jupiter" );produce "Fred from jupiter". Facile ...: D
udoline

WordUtils.capitalizeFully () ha funzionato per me come un incantesimo dato che: WordUtils.capitalizeFully ("I am FINE") = "I Am Fine"
Atul Sharma,

91

Il codice versione più breve / più veloce per scrivere in maiuscolo la prima lettera di una stringa è:

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

il valore di nameè"Stackoverflow"


4
Mi piace questa soluzione perché assicura che il resto della stringa sia in minuscolo. Questo è ciò di cui avevo bisogno durante la conversione da nomi enumici ALL_CAPS.
Ellen Spertus,

54

Usa la libreria comune di Apache. Libera il tuo cervello da queste cose ed evita il Null Pointer & Index Out Of Bound Eccetions

Passo 1:

Importa la libreria di lingue comuni di apache inserendola nelle build.gradledipendenze

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

Passo 2:

Se sei sicuro che la tua stringa sia tutta in minuscolo, o tutto ciò che ti serve è inizializzare la prima lettera, chiama direttamente

StringUtils.capitalize(yourString);

Se vuoi assicurarti che solo la prima lettera sia maiuscola, come farlo per una enum, chiama toLowerCase()prima e tieni presente che verrà lanciata NullPointerExceptionse la stringa di input è nulla.

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

Ecco altri esempi forniti da Apache. è privo di eccezioni

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

Nota:

WordUtilsè anche incluso in questa libreria, ma è obsoleto. Per favore , non usarlo.


2
Grazie. Non riesco a credere che le persone nemmeno pensino di usare un ciclo for per questo tipo di attività
Alvaro il

@Alvaro, alla fine della giornata - le persone usano il loop per questa attività, controlla il codice sorgente di Apache. Ciò non significa che le persone non dovrebbero usare soluzioni ben testate.
Yuriy Chernyshov,

@YuriyChernyshov certo, intendevo dire che non avrebbero dovuto reinventare la ruota per il codice di produzione per la maggior parte
Alvaro

WordUtils.capitalizeFully () ha funzionato per me come un incantesimo dato che: WordUtils.capitalizeFully ("I am FINE") = "I Am Fine"
Atul Sharma,

Non andrò mai a cercare librerie esterne solo per piccoli scopi come How to capitalize the first letter of a String in Java?.
Stack Overflow

25

Giava:

semplicemente un metodo di supporto per capitalizzare ogni stringa.

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

Dopodiché chiama semplicemente str = capitalize(str)


Kotlin:

str.capitalize()

Genererà un'eccezione se strè null. Controlla che la stringa non sia nulla e abbia almeno un carattere prima di usarlo.
attacomsian

@attacomsian hai ragione, aggiorno il codice java e per Kotlin puoi usare str? .capitalize ()
Amir Hossein Ghasemi

22

Quello che vuoi fare è probabilmente questo:

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

(converte il primo carattere in maiuscolo e aggiunge il resto della stringa originale)

Inoltre, si crea un lettore di flussi di input, ma non si legge mai alcuna riga. Così namesarà sempre null.

Questo dovrebbe funzionare:

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


12

Di seguito la soluzione funzionerà.

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

Non è possibile utilizzare toUpperCase () sul carattere primitivo, ma è possibile rendere prima l'intera stringa in maiuscolo, quindi prendere il primo carattere, quindi aggiungere alla sottostringa come mostrato sopra.


toUpperCase è limitato in questione.
Harpreet Sandhu - TheRootCoder il

In questione, stava cercando di utilizzare UpperCase su una primitiva che non funzionava.
Jijil Kakkadathu,

1
Oh. Mi mancava quella cosa. (y)
Harpreet Sandhu - TheRootCoder il

1
ottima risposta caro
Dulaj Kulathunga,


7

Anche il più corto:

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

Ha funzionato per me.


6

Imposta la stringa in minuscolo, quindi imposta la prima lettera in maiuscolo in questo modo:

    userName = userName.toLowerCase();

quindi per scrivere in maiuscolo la prima lettera:

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

la sottostringa sta semplicemente ottenendo un pezzo di una stringa più grande, quindi le stiamo combinando di nuovo insieme.


7
Come ottengo, la prima riga di codice, è inutile, poiché il resto della stringa è impostato in minuscolo in entrambi i modi.
Håvard Nygård,

6

Che dire di 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

Utilizzare questo metodo di utilità per ottenere tutta la prima lettera maiuscola.

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

Puoi anche provare questo:

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

Questo è meglio (ottimizzato) rispetto all'utilizzo della sottostringa. (ma non preoccuparti di stringhe piccole)


4

Puoi usare substring()per fare questo.

Ma ci sono due casi diversi:

Caso 1

Se le Stringlettere maiuscole devono essere leggibili dall'uomo, è necessario specificare anche le impostazioni internazionali predefinite:

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

Caso 2

Se le lettere Stringmaiuscole devono essere leggibili automaticamente, evita di usarle Locale.getDefault()perché la stringa restituita sarà incoerente tra regioni diverse e in questo caso specifica sempre la stessa locale (ad esempio toUpperCase(Locale.ENGLISH)). Ciò assicurerà che le stringhe utilizzate per l'elaborazione interna siano coerenti, il che consentirà di evitare bug difficili da trovare.

Nota: non è necessario specificare Locale.getDefault()per toLowerCase(), poiché ciò avviene automaticamente.


4

In Android Studio

Aggiungi questa dipendenza al tuo build.gradle (Module: app)

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

Ora puoi usare

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

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

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

4

se usi PRIMAVERA :

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


    return capitalize(name);

NOTA: se hai già la dipendenza da Apache Common Lang, allora considera di usare StringUtils.capitalize come suggeriscono altre risposte.

ATTUAZIONE: https://github.com/spring-projects/spring-framework/blob/64440a5f04a17b3728234afaa89f57766768decb/spring-core/src/main/java/org/springframework/util/StringU5s.j55

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


4

FUNZIONA 101%

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

Questo è solo per mostrarti che non eri così sbagliato.

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

Nota: questo non è affatto il modo migliore per farlo. Questo serve solo a mostrare all'OP che può essere fatto anche usando charAt(). ;)


1
+1 per "non così sbagliato". Vorrei preferirei Character.toString(name.charAt(0)) invece che ""+name.charAt(0)per mostrare quello che voglio veramente fare.
user85421

Nessun controllo lunghezza nullo. La lunghezza potrebbe essere zero.
Chrispix,

3

Questo funzionerà

char[] array = value.toCharArray();

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

String result = new String(array);

3

Puoi usare il seguente codice:

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

prova questo

Quello che fa questo metodo è che, considera la parola "ciao mondo" questo metodo lo trasforma in "Ciao mondo" maiuscole all'inizio di ogni parola.

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

    }

Ma questo codice sembra praticamente comprensibile, tutti i metodi sono facili da capire anche con i loro nomi.
Ameen Maheen,

Funziona come un fascino!
TheVinceble,

3

Le risposte fornite servono a scrivere in maiuscolo la prima lettera di una sola parola. utilizzare il seguente codice per scrivere in maiuscolo un'intera stringa.

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

produzione : This Is A Random String


3

Se Input è UpperCase, utilizzare quindi quanto segue:

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

Se Input è LowerCase, utilizzare quindi quanto segue:

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

Puoi usare il seguente codice:

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

}

esempio di test con 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

Utilizzando commons.lang.StringUtilsla migliore risposta è:

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

Lo trovo geniale poiché avvolge la stringa con uno StringBuffer. Puoi manipolare StringBuffer come desideri e usando la stessa istanza.


2

Ancora un altro esempio, come è possibile rendere maiuscola la prima lettera dell'input dell'utente:

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)));
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.