Comment capitaliser la première lettre d’une chaîne en Java?

J’utilise Java pour obtenir une entrée Ssortingng de l’utilisateur. J’essaie de mettre la première lettre de cette entrée en majuscule.

J’ai essayé ceci:

 Ssortingng name; BufferedReader br = new InputStreamReader(System.in); Ssortingng s1 = name.charAt(0).toUppercase()); System.out.println(s1 + name.subssortingng(1)); 

ce qui a conduit à ces erreurs de compilation:

  • Incompatibilité de type: impossible de convertir InputStreamReader en BufferedReader

  • Impossible d’invoquer toUppercase () sur le caractère de type primitif

 Ssortingng str = "java"; Ssortingng cap = str.subssortingng(0, 1).toUpperCase() + str.subssortingng(1); // cap = "Java" 

Avec votre exemple:

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

SsortingngUtils.capitalize(..) de commons-lang

Le code de version plus court / plus rapide pour mettre en majuscule la première lettre d’une chaîne est:

 Ssortingng name = "stackoverflow"; name = name.subssortingng(0,1).toUpperCase() + name.subssortingng(1).toLowerCase(); 

la valeur du name est "Stackoverflow"

Ce que vous voulez faire est probablement ceci:

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

(convertit le premier caractère en majuscule et ajoute le rest de la chaîne d’origine)

En outre, vous créez un lecteur de stream d’entrée, mais ne lisez jamais de ligne. Ainsi, le name sera toujours null .

Cela devrait fonctionner:

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

Utilisez la bibliothèque commune d’Apache. Libérez votre cerveau de ces objects et évitez les exceptions Null Pointer & Index Out Of Bound

Étape 1:

Importez la bibliothèque de lang commune d’Apache en la plaçant dans les dépendances de build.gradle

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

Étape 2:

Si vous êtes sûr que votre chaîne est en minuscule, ou que vous devez simplement initialiser la première lettre, appelez directement

 SsortingngUtils.capitalize(yourSsortingng); 

Si vous voulez vous assurer que seule la première lettre est en majuscule, comme pour une enum , appelez toLowerCase() premier et gardez à l’esprit qu’elle lancera NullPointerException si la chaîne d’entrée est null.

 SsortingngUtils.capitalize(YourEnum.STUFF.name().toLowerCase()); SsortingngUtils.capitalize(yourSsortingng.toLowerCase()); 

Voici d’autres exemples fournis par apache. c’est exempt d’exception

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

Remarque:

WordUtils est également inclus dans cette bibliothèque, mais est obsolète. S’il vous plaît ne pas utiliser cela.

WordUtils.capitalize(java.lang.Ssortingng) d’ Apache Commons .

La solution ci-dessous fonctionnera.

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

Vous ne pouvez pas utiliser toUpperCase () sur le caractère primitif, mais vous pouvez d’abord convertir Ssortingng en Uppercase, puis prendre le premier caractère, puis l’append à la sous-chaîne, comme indiqué ci-dessus.

Utilisez WordUtils.capitalize(str) .

Définissez la chaîne en minuscules, puis définissez la première lettre sur Upper comme ceci:

  userName = userName.toLowerCase(); 

puis capitaliser la première lettre:

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

la sous-chaîne ne fait qu’obtenir un morceau d’une plus grande chaîne, puis nous les regroupons.

Le plus court aussi:

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

Travaillé pour moi

 Ssortingng str1 = "hello"; str1.subssortingng(0, 1).toUpperCase()+str1.subssortingng(1); 

Vous pouvez utiliser la subssortingng() pour ce faire.

Mais il y a deux cas différents:

Cas 1

Si la Ssortingng vous mettez en majuscule est conçue pour être lisible par l’homme, vous devez également spécifier les parameters régionaux par défaut:

 Ssortingng firstLetterCapitalized = mySsortingng.subssortingng(0, 1).toUpperCase(Locale.getDefault()) + mySsortingng.subssortingng(1); 

Cas 2

Si la Ssortingng vous mettez en majuscule est conçue pour être lisible par Locale.getDefault() , évitez d’utiliser Locale.getDefault() car la chaîne renvoyée sera incohérente entre les différentes régions et, dans ce cas, spécifiez toujours les mêmes parameters régionaux (par exemple, toUpperCase(Locale.ENGLISH) ). Cela garantira la cohérence des chaînes que vous utilisez pour le traitement interne, ce qui vous aidera à éviter les bogues difficiles à trouver.

Remarque: Vous n’avez pas besoin de spécifier Locale.getDefault() pour toLowerCase() , car cela se fait automatiquement.

Dans Android Studio

Ajoutez cette dépendance à votre build.gradle (Module: app)

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

Maintenant, vous pouvez utiliser

 Ssortingng ssortingng = "STRING WITH ALL CAPPS AND SPACES"; ssortingng = ssortingng.toLowerCase(); // Make all lowercase if you have caps someTextView.setText(WordUtils.capitalize(ssortingng)); 

Qu’en est-il de WordUtils.capitalizeFully () ?

 import org.apache.commons.lang3.text.WordUtils; public class Main { public static void main(Ssortingng[] args) { final Ssortingng str1 = "HELLO WORLD"; System.out.println(capitalizeFirstLetter(str1)); // output: Hello World final Ssortingng str2 = "Hello WORLD"; System.out.println(capitalizeFirstLetter(str2)); // output: Hello World final Ssortingng str3 = "hello world"; System.out.println(capitalizeFirstLetter(str3)); // output: Hello World final Ssortingng str4 = "heLLo wORld"; System.out.println(capitalizeFirstLetter(str4)); // output: Hello World } private static Ssortingng capitalizeFirstLetter(Ssortingng str) { return WordUtils.capitalizeFully(str); } } 

C’est juste pour vous montrer que vous n’étiez pas si mal.

 BufferedReader br = new InputstreamReader(System.in); // Assuming name is not blank Ssortingng name = br.readLine(); //No more error telling that you cant convert char to ssortingng Ssortingng s1 = (""+name.charAt(0)).toUppercase()); // Or, as Carlos prefers. See the comments to this post. Ssortingng s1 = Character.toSsortingng(name.charAt(0)).toUppercase()); System.out.println(s1+name.subssortingng(1)); 

Note: Ce n’est pas du tout le meilleur moyen de le faire. C’est juste pour montrer à l’OP qu’il peut être fait en utilisant également charAt() . 😉

Vous pouvez également essayer ceci:

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

C’est mieux (optimisé) qu’avec l’utilisation de sous-chaîne. (mais ne vous inquiétez pas sur la petite chaîne)

essaye celui-là

Ce que fait cette méthode, c’est que le travail “hello world” cette méthode le transforme en “Hello World” en majuscule au début de chaque mot.

  private Ssortingng capitalizer(Ssortingng word){ Ssortingng[] words = word.split(" "); SsortingngBuilder sb = new SsortingngBuilder(); if (words[0].length() > 0) { sb.append(Character.toUpperCase(words[0].charAt(0)) + words[0].subSequence(1, words[0].length()).toSsortingng().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(); } 

Jetez un coup d’oeil à WordList d’ACL.

WordUtils.capitalize (“votre chaîne”) == “Votre chaîne”

Comment mettre en majuscule chaque première lettre d’un mot dans une chaîne?

 public static Ssortingng capitalizer(final Ssortingng texto) { // split words Ssortingng[] palavras = texto.split(" "); SsortingngBuilder sb = new SsortingngBuilder(); // list of word exceptions List excessoes = new ArrayList(Arrays.asList("de", "da", "das", "do", "dos", "na", "nas", "no", "nos", "a", "e", "o", "em", "com")); for (Ssortingng palavra : palavras) { if (excessoes.contains(palavra.toLowerCase())) sb.append(palavra.toLowerCase()).append(" "); else sb.append(Character.toUpperCase(palavra.charAt(0))).append(palavra.subssortingng(1).toLowerCase()).append(" "); } return sb.toSsortingng().sortingm(); } 
 Use this utility method to get all first letter in capital. Ssortingng captializeAllFirstLetter(Ssortingng 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); } 

Cela fonctionnera

 char[] array = value.toCharArray(); array[0] = Character.toUpperCase(array[0]); Ssortingng result = new Ssortingng(array); 

Vous pouvez utiliser le code suivant:

 public static void main(Ssortingng[] args) { capitalizeFirstLetter("java"); capitalizeFirstLetter("java developer"); } public static void capitalizeFirstLetter(Ssortingng text) { SsortingngBuilder str = new SsortingngBuilder(); Ssortingng[] tokens = text.split("\\s");// Can be space,comma or hyphen for (Ssortingng token : tokens) { str.append(Character.toUpperCase(token.charAt(0))).append(token.subssortingng(1)).append(" "); } str.toSsortingng().sortingm(); // Trim trailing space System.out.println(str); } 

Beaucoup de réponses sont très utiles, donc je les ai utilisées pour créer une méthode permettant de transformer une chaîne en titre (premier caractère en majuscule):

 static Ssortingng toTitle (Ssortingng s) { Ssortingng s1 = s.subssortingng(0,1).toUpperCase(); Ssortingng sTitle = s1 + s.subssortingng(1); return sTitle; } 

Vous pouvez utiliser le code suivant:

 public static Ssortingng capitalizeSsortingng(Ssortingng ssortingng) { if (ssortingng == null || ssortingng.sortingm().isEmpty()) { return ssortingng; } char c[] = ssortingng.sortingm().toLowerCase().toCharArray(); c[0] = Character.toUpperCase(c[0]); return new Ssortingng(c); } 

exemple de test avec JUnit:

 @Test public void capitalizeSsortingngUpperCaseTest() { Ssortingng ssortingng = "HELLO WORLD "; ssortingng = capitalizeSsortingng(ssortingng); assertThat(ssortingng, is("Hello world")); } @Test public void capitalizeSsortingngLowerCaseTest() { Ssortingng ssortingng = "hello world "; ssortingng = capitalizeSsortingng(ssortingng); assertThat(ssortingng, is("Hello world")); } 

Mettre en majuscule le premier caractère de chaque mot d’une chaîne,

D’abord, vous devez obtenir chaque mot de cette chaîne et pour cette chaîne divisée où n’importe quel espace est utilisé en utilisant la méthode de division comme ci-dessous et stocker chaque mot dans un tableau. Ensuite, créez une chaîne vide. Après cela, en utilisant la méthode subssortingng (), obtenez le premier caractère et le caractère restant du mot correspondant et stockez-les dans deux variables différentes.

Ensuite, en utilisant la méthode toUpperCase (), mettez en majuscule le premier caractère et ajoutez les caractères rémanents ci-dessous à cette chaîne vide.

 public class Test { public static void main(Ssortingng[] args) { Ssortingng str= "my name is khan"; // ssortingng Ssortingng words[]=str.split("\\s"); // split each words of above ssortingng Ssortingng capitalizedWord = ""; // create an empty ssortingng for(Ssortingng w:words) { Ssortingng first = w.subssortingng(0,1); // get first character of each word Ssortingng f_after = w.subssortingng(1); // get remaining character of corresponding word capitalizedWord += first.toUpperCase() + f_after+ " "; // capitalize first character and add the remaining to the empty ssortingng and continue } System.out.println(capitalizedWord); // print the result } } 

L’exemple suivant met également en majuscule les mots après les caractères spéciaux tels que [/ -]

  public static Ssortingng capitalize(Ssortingng text) { char[] ssortingngArray = text.sortingm().toCharArray(); boolean wordStarted = false; for( int i = 0; i < stringArray.length; i++) { char ch = stringArray[i]; if ((ch >= 'a' && ch < = 'z') || (ch >= 'A' && ch < = 'Z') || ch == '\'') { if( !wordStarted ) { stringArray[i] = Character.toUpperCase(stringArray[i]); wordStarted = true; } } else { wordStarted = false; } } return new String(stringArray); } Example: capitalize("that's a beautiful/wonderful life we have.We really-do") Output: That's A Beautiful/Wonderful Life We Have.We Really-Do 

merci j’ai lu certains des commentaires et je suis venu avec le suivant

 public static void main(Ssortingng args[]) { Ssortingng myName = "nasser"; Ssortingng newName = myName.toUpperCase().charAt(0) + myName.subssortingng(1); System.out.println(newName ); } 

J’espère que ça aide bonne chance

La réponse d’Ameen Mahheen est bonne mais si nous avons une chaîne avec un espace double, comme “hello world”, alors sb.append obtient une exception IndexOutOfBounds. La bonne chose à faire est de tester avant cette ligne, en faisant:

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

Vous pouvez essayer ceci

 /** * capitilizeFirst(null) -> "" * capitilizeFirst("") -> "" * capitilizeFirst(" ") -> "" * capitilizeFirst(" df") -> "Df" * capitilizeFirst("AS") -> "As" * * @param str input ssortingng * @return Ssortingng with the first letter capitalized */ public Ssortingng capitilizeFirst(Ssortingng str) { // assumptions that input parameter is not null is legal, as we use this function in map chain Function capFirst = (Ssortingng s) -> { Ssortingng result = ""; // < -- accumulator try { result += s.substring(0, 1).toUpperCase(); } catch (Throwable e) {} try { result += s.substring(1).toLowerCase(); } catch (Throwable e) {} return result; }; return Optional.ofNullable(str) .map(String::trim) .map(capFirst) .orElse(""); } 

Vous pouvez utiliser Class WordUtils.

Supposons que votre chaîne soit “adresse actuelle” puis utilisez

**** texte fort Wordutils.capitaliz (Ssortingng); sortie: adresse actuelle

Voir: http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/text/WordUtils.html