Как сделать заглавной первую букву строки в Java?

Я использую 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

62 ответа

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

С вашим примером:

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

StringUtils.capitalize(..) из общего достояния

Укороченный / более быстрый код версии для заглавных букв первой буквы строки:

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

значение name является "Stackru"

Используйте общую библиотеку Apache. Освободите свой мозг от этих вещей и избегайте исключений Null Pointer и Index Out of Bound

Шаг 1:

Импортируйте общую библиотеку Apache, поместив это в build.gradle зависимости

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

Шаг 2:

Если вы уверены, что ваша строка состоит из строчных букв или все, что вам нужно, это инициализировать первую букву, позвоните напрямую

StringUtils.capitalize(yourString);

Если вы хотите убедиться, что только первая буква написана с заглавной буквы, как это делается для enum, вызов toLowerCase() во-первых, имейте в виду, что NullPointerException если входная строка равна нулю.

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

Вот еще примеры, предоставленные Apache. это исключение бесплатно

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

Замечания:

WordUtils также включен в эту библиотеку, но не рекомендуется. Пожалуйста , не используйте это.

если вы используете ВЕСНУ:

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


    return capitalize(name);

ПРИМЕЧАНИЕ. Если у вас уже есть зависимость Apache Common Lang, рассмотрите возможность использования их StringUtils.capitalize, как предлагают другие ответы.

РЕАЛИЗАЦИЯ: https://github.com/spring-projects/spring-framework/blob/64440a5f04a17b3728234afaa89f57766768decb/spring-core/src/main/java/org/springframework/util/StringUtils.java.

ССЫЛКА: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/util/StringUtils.html

Для пользователей Java:

просто расширение для заглавных букв каждой строки.

public static capitalize(String str)
{
    return this.substring(0, 1).toUpperCase() + this.substring(1)
}

После этого просто позвоните str = capitalize(str)

Для пользователей Kotlin просто позвоните:

str.capitalize()

Что вы хотите сделать, это, вероятно, это:

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

(преобразует первый символ в верхний регистр и добавляет остаток исходной строки)

Кроме того, вы создаете устройство чтения входного потока, но никогда не читаете ни одной строки. таким образом name всегда будет null,

Это должно работать:

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

WordUtils.capitalize(java.lang.String) от Apache Commons.

Ниже решение будет работать.

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

Вы не можете использовать toUpperCase() на примитивном символе, но вы можете сначала сделать всю строку в верхнем регистре, затем взять первый символ, а затем добавить к подстроке, как показано выше.

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

Использование WordUtils.capitalize(str),

String str1 = "hello";
str1.substring(0, 1).toUpperCase()+str1.substring(1);

Вот моя подробная статья по теме для всех возможных вариантов использования заглавной буквы в строке в Android.

Метод написания заглавной буквы в строке в Java

public static String capitalizeString(String str) {
        String retStr = str;
        try { // We can face index out of bound exception if the string is null
            retStr = str.substring(0, 1).toUpperCase() + str.substring(1);
        }catch (Exception e){}
        return retStr;
}

Метод использования заглавной буквы в строке в КОТЛИН

fun capitalizeString(str: String): String {
        var retStr = str
        try { // We can face index out of bound exception if the string is null
            retStr = str.substring(0, 1).toUpperCase() + str.substring(1)
        } catch (e: Exception) {
        }
        return retStr
}

БУДЕТ РАБОТАТЬ 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); 

    }

}

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

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

Работал на меня.

Установите строку в нижний регистр, затем установите первую букву в верхний, как это:

    userName = userName.toLowerCase();

затем заглавную букву:

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

подстрока просто получает кусок большей строки, затем мы объединяем их вместе.

Простое решение! не требует какой-либо внешней библиотеки, он может обрабатывать пустую или одну буквенную строку.

private String capitalizeFirstLetter(@NonNull  String str){
        return str.length() == 0 ? str
                : str.length() == 1 ? str.toUpperCase()
                : str.substring(0, 1).toUpperCase() + str.substring(1).toLowerCase();
}

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

Как насчет 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);
    }
}

Ты можешь использовать 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(), как это делается автоматически.

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

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

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

Чтобы получить первую заглавную букву и другие желающие меньшие, вы можете использовать приведенный ниже код. Я сделал через функцию подстроки.

String currentGender="mAlE";
    currentGender=currentGender.substring(0,1).toUpperCase()+currentGender.substring(1).toLowerCase();

Здесь substring(0,1).toUpperCase() преобразует первую заглавную букву, а substring(1).toLowercase() преобразует всю оставшуюся букву в малый регистр.

ВЫВОД:

мужчина

Текущие ответы либо неверны, либо чрезмерно усложняют эту простую задачу. Проведя небольшое исследование, я придумал два подхода:

1. Струны substring() Метод

public static String capitalize(String str) {
    if(str== null || str.isEmpty()) {
        return str;
    }

    return str.substring(0, 1).toUpperCase() + str.substring(1);
}

Примеры:

System.out.println(capitalize("java")); // Java
System.out.println(capitalize("beTa")); // BeTa
System.out.println(capitalize(null)); // null

2. Apache Commons Lang

Библиотека Apache Commons Lang предоставляет StringUtils класс для этой цели:

System.out.println(StringUtils.capitalize("apache commons")); // Apache commons
System.out.println(StringUtils.capitalize("heLLO")); // HeLLO
System.out.println(StringUtils.uncapitalize(null)); // null

Не забудьте добавить следующую зависимость к вашему pom.xml файл:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.9</version>
</dependency>

Существующие ответы либо

  • неправильно: они думают, что char - это отдельный символ (кодовая точка), в то время как это слово UTF-16, которое может быть половиной суррогатной пары, или
  • использовать библиотеки, что само по себе неплохо, но требует добавления зависимостей в ваш проект, или
  • используйте Java 8 Streams, что вполне допустимо, но не всегда возможно.

Давайте посмотрим на суррогатные символы (каждый такой символ состоит из двух слов UTF-16 - Javachars) и может иметь варианты в верхнем и нижнем регистре:

IntStream.rangeClosed(0x01_0000, 0x10_FFFF)
    .filter(ch -> Character.toUpperCase(ch) != Character.toLowerCase(ch))
    .forEach(ch -> System.out.print(new String(new int[] { ch }, 0, 1)));

Многие из них могут выглядеть для вас как "тофу" (□), но в основном это допустимые символы редких шрифтов, и некоторые гарнитуры их поддерживают.

Например, давайте посмотрим на Deseret Small Letter Long I (), U+10428, "\uD801\uDC28":

System.out.println("U+" + Integer.toHexString(
        "\uD801\uDC28".codePointAt(0)
)); // U+10428

System.out.println("U+" + Integer.toHexString(
        Character.toTitleCase("\uD801\uDC28".codePointAt(0))
)); // U+10400 — ok! capitalized character is another code point

System.out.println("U+" + Integer.toHexString(new String(new char[] {
        Character.toTitleCase("\uD801\uDC28".charAt(0)), "\uD801\uDC28".charAt(1)
}).codePointAt(0))); // U+10428 — oops! — cannot capitalize an unpaired surrogate

Таким образом, кодовую точку можно использовать с заглавной буквы даже в тех случаях, когда charне может быть. Учитывая это, давайте напишем правильный (и совместимый с Java 1.5!) Заглавные буквы:

@Contract("null -> null")
public static CharSequence capitalize(CharSequence input) {
    int length;
    if (input == null || (length = input.length()) == 0) return input;

    return new StringBuilder(length)
            .appendCodePoint(Character.toTitleCase(Character.codePointAt(input, 0)))
            .append(input, Character.offsetByCodePoints(input, 0, 1), length);
}

И проверим, работает ли:

public static void main(String[] args) {
    // ASCII
    System.out.println(capitalize("whatever")); // w -> W

    // UTF-16, no surrogate
    System.out.println(capitalize("что-то")); // ч -> Ч

    // UTF-16 with surrogate pairs
    System.out.println(capitalize("\uD801\uDC28")); //  -> 
}

Смотрите также:

Если Input является UpperCase, тогда используйте следующее:

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

Если Input является LowerCase, тогда используйте следующее:

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

Попробуй это

Этот метод состоит в том, что рассмотрим слово "привет мир", которое этот метод превратит в "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();

    }

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

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

}

Из commons.lang.StringUtils лучший ответ:

public static String capitalize (String str) {
int strLen;
return str! = null && (strLen = str.length ())! = 0? (новый StringBuffer (strLen)). append (Character.toTitleCase (str.charAt (0))). append (str.substring (1)). toString (): str;
}

я нахожу это блестящим, так как он оборачивает строку с помощью StringBuffer. Вы можете манипулировать StringBuffer по своему желанию, используя тот же экземпляр.

Это будет работать

char[] array = value.toCharArray();

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

String result = new String(array);

Ответы даны только для заглавных букв только в одном слове. используйте следующий код, чтобы использовать заглавную строку

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

выход: This Is A Random String

Другие вопросы по тегам