Como capitalizar a primeira letra de uma String em Java?


305

Estou usando Java para obter uma Stringentrada do usuário. Estou tentando fazer a primeira letra desta entrada em maiúscula.

Eu tentei isso:

String name;

BufferedReader br = new InputStreamReader(System.in);

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

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

o que levou a esses erros do compilador:

  • Incompatibilidade de tipo: não é possível converter de InputStreamReader em BufferedReader

  • Não é possível chamar toUppercase () no tipo primitivo char


2
@ Pontus - eu discordo. Para a entrada "abcd", o OP deseja a saída "Abcd". Parece bem claro, embora a pergunta pudesse ter sido melhor.
Kobi


caractere é um tipo de dados primitivo em Java. Você não pode desreferenciar um tipo de dados primitivo com o operador ponto (.). Você deve substring o primeiro caractere por name.substring (0,1);
Divakar Rajesh

Respostas:


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

Com o seu exemplo:

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
Eu acho que você precisa de -1 após str.length (), caso contrário, você sairá dos limites.
dutt

@ Dutt: Não, na verdade, isso estava perfeitamente bem também. Mas a modificação de Rekin tornou perfeito. ;)
Adeel Ansari

commons lang é sempre melhor do que escrever sua própria função, exceto em casos raros em que você conhece melhor. Se você não leu o common lang java doc na função capitalize, não deveria escrever o seu próprio.
The.Laughing.Man

211

Eu estava usando o WordUtils, ele também tem a mesma função, mas maiúscula as primeiras letras de todas as palavras em uma frase.
Surbhit Rao

StringUtils.capitalize( "fred from jupiter" );produz "Fred from jupiter". Fácil ...: D
udoline

WordUtils.capitalizeFully () funcionou para mim como charme, pois dá: WordUtils.capitalizeFully ( "Eu estou bem") = "Eu estou bem"
Atul Sharma

91

O código da versão mais curta / mais rápida para colocar em maiúscula a primeira letra de uma String é:

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

o valor de nameé"Stackoverflow"


4
Eu gosto dessa solução porque garante que o restante da string seja minúsculo. Era disso que eu precisava ao converter os nomes de enum ALL_CAPS.
Ellen Spertus

54

Use a biblioteca comum do Apache. Liberte seu cérebro desses materiais e evite o ponteiro nulo e o índice fora de exceções limitadas

Passo 1:

Importe a biblioteca lang comum do apache colocando isso em build.gradledependências

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

Passo 2:

Se você tiver certeza de que sua string é minúscula ou tudo o que precisa é inicializar a primeira letra, ligue diretamente para

StringUtils.capitalize(yourString);

Se você deseja certificar-se de que apenas a primeira letra seja maiúscula, como fazer isso para um enum, chame toLowerCase()primeiro e lembre-se de que ele será gerado NullPointerExceptionse a sequência de entrada for nula.

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

Aqui estão mais amostras fornecidas pelo apache. é livre de exceções

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

Nota:

WordUtilstambém está incluído nesta biblioteca, mas está obsoleto. Por favor , não use isso.


2
Obrigado. Eu não posso acreditar que as pessoas sequer pensar em usar um loop for para este tipo de tarefa
Alvaro

@ Alvaro, no final do dia - as pessoas usam loop para esta tarefa, verifique o código-fonte apache. Isso não significa que as pessoas não devam usar soluções bem testadas.
Yuriy Chernyshov

@YuriyChernyshov certeza, eu quis dizer que eles não devem ser reinventar a roda para código de produção para a maior parte
Alvaro

WordUtils.capitalizeFully () funcionou para mim como charme, pois dá: WordUtils.capitalizeFully ( "Eu estou bem") = "Eu estou bem"
Atul Sharma

Eu nunca vou para bibliotecas externas apenas para pouco propósito How to capitalize the first letter of a String in Java?.
Stack Overflow

25

Java:

simplesmente um método auxiliar para capitalizar cada string.

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

Depois disso, basta ligar str = capitalize(str)


Kotlin:

str.capitalize()

Irá lançar uma exceção se o strfor nulo. Verifique se a sequência não é nula e possui pelo menos um caractere antes de usá-lo.
attacomsian 14/09/19

@attacomsian você está certo, código que eu atualização java e para Kotlin você pode usar str .capitalize ()?
Amir Hossein Ghasemi

22

O que você quer fazer é provavelmente o seguinte:

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

(converte o primeiro caractere em maiúsculas e adiciona o restante da string original)

Além disso, você cria um leitor de fluxo de entrada, mas nunca lê nenhuma linha. Assim namesempre será null.

Isso deve funcionar:

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


12

A solução abaixo funcionará.

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

Você não pode usar toUpperCase () em caracteres primitivos, mas pode fazer String inteira em maiúsculas primeiro e depois pegar o primeiro caractere e depois anexá-lo à substring, como mostrado acima.


toUpperCase está restrito em questão.
Harpreet Sandhu - TheRootCoder 25/10

Em questão, ele estava tentando usar o UpperCase no primitivo que não funcionaria.
Jijil Kakkadathu 25/10

1
ah Eu senti falta dessa coisa. (y)
Harpreet Sandhu - TheRootCoder 26/10

1
grande resposta querida
Dulaj Kulathunga


7

Mais curto também:

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

Trabalhou para mim.


6

Defina a string como minúscula e, em seguida, defina a primeira letra como maiúscula:

    userName = userName.toLowerCase();

depois colocar em maiúscula a primeira letra:

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

substring está apenas obtendo um pedaço de uma string maior, então estamos combinando-os novamente.


7
Como eu entendi, a primeira linha de código é inútil, pois o restante da string é definido como minúsculo de qualquer maneira.
Håvard Nygård

6

E o 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

Use este método utilitário para obter todas as primeiras letras maiúsculas.

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

Você também pode tentar o seguinte:

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

Isso é melhor (otimizado) do que com o uso de substring. (mas não se preocupe com pequenas cordas)


4

Você pode usar substring()para fazer isso.

Mas existem dois casos diferentes:

Caso 1

Se o que Stringvocê está colocando em maiúsculas pretende ser legível por humanos, você também deve especificar o código do idioma padrão:

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

Caso 2

Se o que Stringvocê está usando maiúsculas for legível por máquina, evite usá-lo Locale.getDefault()porque a sequência retornada será inconsistente em diferentes regiões e, nesse caso, sempre especifique o mesmo código do idioma (por exemplo,toUpperCase(Locale.ENGLISH) ). Isso garantirá que as strings que você está usando para o processamento interno sejam consistentes, o que ajudará a evitar erros difíceis de encontrar.

Nota: Você não precisa especificar Locale.getDefault()para toLowerCase(), pois isso é feito automaticamente.


4

No Android Studio

Adicione essa dependência ao seu build.gradle (Module: app)

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

Agora você pode usar

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 você usar o SPRING :

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


    return capitalize(name);

NOTA: Se você já possui dependência do Apache Common Lang, considere usar o StringUtils.capitalize, conforme sugerem outras respostas.

IMPLEMENTAÇÃO: 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

VAI TRABALHAR 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

Isso é apenas para mostrar que você não estava errado.

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: Essa não é a melhor maneira de fazê-lo. Isso é apenas para mostrar ao OP que isso pode ser feito usando charAt()também. ;)


1
+1 para "não está errado". Eu preferiria em Character.toString(name.charAt(0)) vez de ""+name.charAt(0)mostrar o que realmente quero fazer.
user85421

Nenhuma verificação de comprimento nulo. O comprimento pode ser zero.
precisa

3

Isso vai funcionar

char[] array = value.toCharArray();

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

String result = new String(array);

3

Você pode usar o seguinte código:

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

tente este

O que esse método faz é que, considere a palavra "olá mundo", esse método a transforme em "olá mundo", com maiúsculas no início de cada palavra.

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

    }

Mas esse código parece bastante compreensível. Todos os métodos são fáceis de entender pelos nomes também .mas, obrigado pelo seu comentário, tentará tornar mais perfeito a partir da próxima vez, fico com preguiça de vez em quando :-).
Ameen Maheen

Funciona como um encanto!
TheVinceble

3

As respostas dadas são para colocar em maiúscula apenas a primeira letra de uma palavra. use o código a seguir para colocar em maiúscula uma seqüência inteira.

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

resultado : This Is A Random String


3

Se Input for UpperCase, use o seguinte:

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

Se Entrada for LowerCase, use o seguinte:

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

Você pode usar o seguinte código:

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

}

exemplo de teste com 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

Usando commons.lang.StringUtilsa melhor resposta é:

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

Acho isso brilhante, pois envolve a string com um StringBuffer. Você pode manipular o StringBuffer como desejar e usando a mesma instância.


2

Ainda outro exemplo, como você pode colocar a primeira letra da entrada do usuário em maiúscula:

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)));
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.