Как использовать первую букву строки в 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

Ответ 1

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

Ответ 3

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

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

значение name равно "Stackoverflow"

Ответ 4

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

Шаг 1:

Импортируйте библиотеку apache common lang, помещая это в зависимости build.gradle

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

Шаг 2:

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

StringUtils.capitalize(yourString);

Если вы хотите убедиться, что только первая буква toLowerCase(), например, сделать это для enum, toLowerCase() вызовите 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 также включен в эту библиотеку, но устарел. Пожалуйста , не используйте это.

Ответ 5

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

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

(преобразует сначала char в верхний регистр и добавляет оставшуюся часть исходной строки)

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

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

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

Ответ 7

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

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

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

Ответ 8

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

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

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

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

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

str.capitalize()

Ответ 10

Установите строку в нижний регистр, затем установите первую букву в верхнюю часть следующим образом:

    userName = userName.toLowerCase();

чтобы заглавная буква первой буквы:

    userName = userName.substring(0, 1).toUpperCase() + userName.substring(1).toLowerCase();
Подстрока

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

Ответ 11

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

Ответ 12

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

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

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

Ответ 13

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

Ответ 14

Вы также можете попробовать следующее:

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

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

Ответ 15

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

Ответ 16

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

Ответ 17

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

Ответ 18

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

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

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

Ответ 19

Попробуй это

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

    }

Ответ 20

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

char[] array = value.toCharArray();

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

String result = new String(array);

Ответ 21

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

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

}

Ответ 22

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

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

Ответ 23

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

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

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

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

Ответ 25

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

Ответ 26

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

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

}

пример с 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"));
}

Ответ 27

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

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

Ответ 28

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

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

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

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

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

Например, давайте посмотрим на маленькую букву Дезерет Long я (𐐨), 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")); // 𐐨 -> 𐐀
}

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

Ответ 29

Многие из ответов очень полезны, поэтому я использовал их для создания метода, чтобы превратить любую строку в заголовок (первый символ заглавный):

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

Ответ 30

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

 public static String capitalizeFirstLetter(@NonNull String customText){
        int count = customText.length();
        if (count == 0) {
            return customText;
        }
        if (count == 1) {
            return customText.toUpperCase();
        }
        return customText.substring(0, 1).toUpperCase() + customText.substring(1).toLowerCase();
    }