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


305

J'utilise Java pour obtenir un String entrée de l'utilisateur. J'essaie de mettre en majuscule la première lettre de cette entrée.

J'ai essayé ceci:

String name;

BufferedReader br = new InputStreamReader(System.in);

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

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

ce qui a conduit à ces erreurs de compilation:

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

  • Impossible d'appeler toUppercase () sur le caractère de type primitif


2
@Pontus - Je ne suis pas d'accord. Pour l'entrée "abcd", l'OP veut la sortie "Abcd". Cela semble assez clair, même si la question aurait pu être meilleure.
Kobi


Le caractère est un type de données primitif en Java. Vous ne pouvez pas déréférencer un type de données primitif avec l'opérateur point (.). Vous devez sous-chaîne le premier caractère par name.substring (0,1);
Divakar Rajesh

Réponses:


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

Avec votre exemple:

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
Je pense que vous avez besoin de -1 après str.length (), sinon vous sortirez des limites.
dutt

@dutt: Non en fait, c'était parfaitement bien aussi. Mais la modification de Rekin l'a rendu parfait. ;)
Adeel Ansari

commons lang est toujours mieux que d'écrire votre propre fonction, sauf dans de rares cas où vous savez mieux. Si vous n'êtes pas allé lire le doc Java commun sur la fonction capitaliser, vous ne devriez pas écrire le vôtre.
The.Laughing.Man

211

J'utilisais WordUtils, il a également la même fonction, mais il met en majuscule les premières lettres de tous les mots d'une phrase.
Surbhit Rao

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

WordUtils.capitalizeFully () a fonctionné pour moi comme un charme car il donne: WordUtils.capitalizeFully ("je suis FINE") = "Je vais bien"
Atul Sharma

91

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

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

la valeur de nameest"Stackoverflow"


4
J'aime cette solution car elle garantit que le reste de la chaîne est en minuscules. C'est ce dont j'avais besoin lors de la conversion à partir des noms d'énumération ALL_CAPS.
Ellen Spertus

54

Utilisez la bibliothèque commune d'Apache. Libérez votre cerveau de ces éléments et évitez les pointeurs nuls et les exceptions hors index

Étape 1:

Importez la bibliothèque lang commune d'Apache en la mettant dans les build.gradledépendances

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

Étape 2:

Si vous êtes sûr que votre chaîne est entièrement en minuscules, ou tout ce dont vous avez besoin est d'initialiser la première lettre, appelez directement

StringUtils.capitalize(yourString);

Si vous voulez vous assurer que seule la première lettre est en majuscule, comme cela pour un enum, appelez d' toLowerCase()abord et gardez à l'esprit qu'il lancera NullPointerExceptionsi la chaîne d'entrée est nulle.

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

Voici d'autres exemples fournis par apache. c'est gratuit

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

Remarque:

WordUtilsest également inclus dans cette bibliothèque, mais est obsolète. Veuillez ne pas utiliser cela.


2
Merci. Je ne peux pas croire que les gens pensent même à utiliser une boucle for pour ce genre de tâche
Alvaro

@Alvaro, à la fin de la journée - les gens utilisent la boucle pour cette tâche, vérifiez le code source d'Apache. Cela ne signifie pas pour autant que les gens ne devraient pas utiliser de solutions bien testées.
Yuriy Chernyshov

@YuriyChernyshov bien sûr, je voulais dire qu'ils ne devraient pas réinventer la roue pour le code de production pour la plupart
Alvaro

WordUtils.capitalizeFully () a fonctionné pour moi comme un charme car il donne: WordUtils.capitalizeFully ("je suis FINE") = "Je vais bien"
Atul Sharma

Je n'irai jamais pour des bibliothèques externes juste pour peu de but comme How to capitalize the first letter of a String in Java?.
Débordement de pile le

25

Java:

simplement une méthode d'aide pour mettre en majuscule chaque chaîne.

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

Après cela, appelez simplement str = capitalize(str)


Kotlin:

str.capitalize()

Il lèvera une exception si le strest nul. Vérifiez que la chaîne n'est pas nulle et contient au moins un caractère avant de l'utiliser.
attacomsian

@attacomsian vous avez raison, je mets à jour le code java et pour Kotlin vous pouvez utiliser str? .capitalize ()
Amir Hossein Ghasemi

22

Ce que vous voulez faire, c'est probablement ceci:

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

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

En outre, vous créez un lecteur de flux d'entrée, mais ne lisez jamais aucune ligne. Il en namesera toujours ainsi null.

Cela devrait fonctionner:

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


12

La solution ci-dessous fonctionnera.

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

Vous ne pouvez pas utiliser toUpperCase () sur un caractère primitif, mais vous pouvez d'abord créer une chaîne entière en majuscules, puis prendre le premier caractère, puis l'ajouter à la sous-chaîne comme indiqué ci-dessus.


toUpperCase est restreint en question.
Harpreet Sandhu - TheRootCoder

En question, il essayait de toUpperCase sur une primitive qui ne fonctionnera pas.
Jijil Kakkadathu du

1
Oh. J'ai raté cette chose. (y)
Harpreet Sandhu - TheRootCoder

1
grande réponse chère
Dulaj Kulathunga


7

Le plus court aussi:

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

A travaillé pour moi.


6

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

    userName = userName.toLowerCase();

puis de mettre en majuscule la première lettre:

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

substring obtient juste un morceau d'une plus grande chaîne, puis nous les combinons à nouveau.


7
Comment je l'obtiens, la première ligne de code, est inutile, car le reste de la chaîne est défini en minuscules de toute façon.
Håvard Nygård

6

Qu'en est-il de 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

Utilisez cette méthode utilitaire pour obtenir toutes les premières lettres en majuscule.

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

Vous pouvez également essayer ceci:

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

C'est mieux (optimisé) qu'avec l'utilisation d'une sous-chaîne. (mais ne vous inquiétez pas sur les petites cordes)


4

Vous pouvez utiliser substring() pour ce faire.

Mais il y a deux cas différents:

Cas 1

Si le Stringfichier en majuscule est destiné à être lisible par l'homme, vous devez également spécifier les paramètres régionaux par défaut:

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

Cas 2

Si le fichier que Stringvous mettez en majuscule est destiné à être lisible par machine, évitez de l'utiliser Locale.getDefault()car la chaîne renvoyée sera incohérente dans différentes régions et dans ce cas, spécifiez toujours les mêmes paramètres 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.


4

Dans Android Studio

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

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

Vous pouvez maintenant utiliser

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

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

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

4

si vous utilisez SPRING :

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


    return capitalize(name);

REMARQUE: si vous avez déjà une dépendance Apache Common Lang, envisagez d'utiliser leur StringUtils.capitalize comme d'autres réponses le suggèrent.

MISE EN ŒUVRE: https://github.com/spring-projects/spring-framework/blob/64440a5f04a17b3728234afaa89f57766768decb/spring-core/src/main/java/org/springframework/util/StringUtils.java#L5

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


4

ÇA MARCHE 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

C'est juste pour vous montrer que vous ne vous trompiez pas.

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

Remarque: ce n'est pas du tout la meilleure façon de le faire. C'est juste pour montrer à l'OP que cela peut aussi être fait en utilisant charAt(). ;)


1
+1 pour "pas si mal". Je préférerais Character.toString(name.charAt(0)) plutôt que de ""+name.charAt(0)montrer ce que je veux vraiment faire.
user85421

Aucune vérification de longueur nulle. La longueur peut être nulle.
Chrispix

3

Cela fonctionnera

char[] array = value.toCharArray();

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

String result = new String(array);

3

Vous pouvez utiliser le code suivant:

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

essaye celui-là

Ce que fait cette méthode, c'est que, Considérez le mot "bonjour le monde" cette méthode le transforme en "Bonjour le monde" capitalisez le début de chaque mot.

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

    }

Mais ce code semble à peu près compréhensible, toutes les méthodes sont faciles à comprendre par leurs noms également.
Ameen Maheen

Fonctionne comme un charme!
TheVinceble

3

Les réponses données concernent la mise en majuscule de la première lettre d'un seul mot. utilisez le code suivant pour mettre une chaîne entière en majuscule.

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

production : This Is A Random String


3

Si Input est UpperCase, alors utilisez ce qui suit:

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

Si Input est LowerCase, alors utilisez ce qui suit:

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

Vous pouvez utiliser le code suivant:

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

}

exemple de test avec 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

Utiliser commons.lang.StringUtilsla meilleure réponse est:

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

Je le trouve génial car il enveloppe la chaîne avec un StringBuffer. Vous pouvez manipuler le StringBuffer comme vous le souhaitez et en utilisant la même instance.


2

Encore un autre exemple, comment mettre en majuscule la première lettre de l'entrée utilisateur:

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)));
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.