Как сделать заглавной первую букву строки в Java? - PullRequest
228 голосов
/ 11 октября 2010

Я использую Java для получения String ввода от пользователя. Я пытаюсь сделать первую букву этого ввода заглавной.

Я пробовал это:

String name;

BufferedReader br = new InputStreamReader(System.in);

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

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

, что привело к этим ошибкам компилятора:

  • Несоответствие типов: невозможно преобразовать из InputStreamReader в BufferedReader

  • Невозможно вызвать toUppercase () для примитивного типа char

Ответы [ 47 ]

5 голосов
/ 19 января 2017

А как насчет 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);
    }
}
5 голосов
/ 10 июня 2017
String str1 = "hello";
str1.substring(0, 1).toUpperCase()+str1.substring(1);
5 голосов
/ 19 марта 2017

Самый короткий:

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

работал для меня.

4 голосов
/ 27 августа 2015

В Android Studio

Добавьте эту зависимость к вашему build.gradle (Module: app)

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

Теперь вы можете использовать

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

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

someTextView.setText(WordUtils.capitalize(string));
4 голосов
/ 15 июня 2014

Вы можете использовать substring() для этого.

Но есть два разных случая:

Дело 1

Если String, который вы пишете с заглавной буквы, предназначен для чтения человеком, вы также должны указать локаль по умолчанию:

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

Дело 2

Если значение String, которое вы пишете с заглавной буквы, должно быть машиночитаемым, избегайте использования Locale.getDefault(), поскольку возвращаемая строка будет несовместимой в разных регионах, и в этом случае всегда указывайте одну и ту же локаль (например, toUpperCase(Locale.ENGLISH)). Это обеспечит согласованность строк, которые вы используете для внутренней обработки, что поможет вам избежать труднодоступных ошибок.

Примечание: вам не нужно указывать Locale.getDefault() для toLowerCase(), так как это делается автоматически.

3 голосов
/ 11 октября 2010

Вы также можете попробовать это:

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

Это лучше (оптимизировано), чем с использованием подстроки. (но не беспокойтесь о маленькой струне)

3 голосов
/ 11 октября 2010

Это просто для того, чтобы показать вам, что вы не ошиблись.

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

Примечание: Это вовсе не лучший способ сделать это. Это просто для того, чтобы показать ОП, что это можно сделать, используя charAt(). ;)

3 голосов
/ 17 апреля 2018
Use this utility method to get all first letter in capital. 


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);
    }
3 голосов
/ 11 марта 2016

Вы можете использовать следующий код:

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 голосов
/ 07 июля 2015

попробуйте это

То, что этот метод делает, это, рассмотрите слово "привет мир", этот метод превратит его в "Hello World" с заглавной буквы начало каждого слова.

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

    }
...