Як використовувати великі літери першого рядка рядка на Java?


305

Я використовую 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 примітивного типу


2
@Pontus - я не згоден. Для входу "abcd" ОП хоче вивести "Abcd". Це здається досить зрозумілим, хоча питання могло бути і краще.
Кобі


символ - це примітивний тип даних на Java. Ви не можете знецінювати примітивний тип даних з оператором dot (.). Ви повинні підстроїти перший символ на ім'я.substring (0,1);
Divakar Rajesh

Відповіді:


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

1
Я думаю, що вам потрібно -1 після str.length (), інакше ви вийдете за межі.
dutt

@dutt: Ні, насправді це теж було чудово. Але модифікація Рекіна зробила його ідеальною. ;)
Адель Ансарі

commons lang - це завжди краще, ніж писати власну функцію, за винятком рідкісних випадків, коли ви знаєте краще. Якщо ви не пішли читати commons lang java doc на функції великої літери, ви не повинні писати свою власну.
The.Laughing.Man

211

Я використовував WordUtils, він також має таку ж функцію, але він використовує великі літери всіх слів у реченні.
Surbhit Rao

StringUtils.capitalize( "fred from jupiter" );виробляє "Fred from jupiter". Легко ...: D
удолін

WordUtils.capitalizeFully () працював для мене, як шарм, як це дає: WordUtils.capitalizeFully ("я хороший") = "Я прекрасний"
Atul Sharma

91

Коротший / швидший код версії для використання великої літери першого рядка:

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

значення nameє"Stackoverflow"


4
Мені подобається це рішення, тому що воно гарантує решту рядка з малих літер. Це те, що мені було потрібно при перетворенні імен перерахувань ALL_CAPS.
Еллен Спертус

54

Використовуйте загальну бібліотеку Apache. Звільніть свій мозок від цих продуктів і уникайте нульових покажчиків та індексів поза межами виключень

Крок 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());

Ось більше зразків, наданих апашем. це виключення безкоштовно

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

Примітка:

WordUtilsтакож включено до цієї бібліотеки, але застаріло. Будь ласка , не використовуйте це.


2
Дякую. Я не можу повірити, що люди навіть думають використовувати цикл для подібних завдань
Альваро

@Alvaro, наприкінці дня - люди використовують цикл для цього завдання, перевіряють вихідний код apache. Це не означає, що люди не повинні використовувати добре перевірені рішення.
Юрій Чернишов

@ ЮрійЧернишов впевнений, я мав на увазі, що здебільшого вони не повинні винаходити колесо для виробничого коду
Альваро

WordUtils.capitalizeFully () працював для мене, як шарм, як це дає: WordUtils.capitalizeFully ("я хороший") = "Я прекрасний"
Atul Sharma

Я ніколи не заходжу до зовнішніх бібліотек лише для такої незначної мети, як How to capitalize the first letter of a String in Java?.
Переповнення стека

25

Java:

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

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

Після цього просто зателефонуйте str = capitalize(str)


Котлін:

str.capitalize()

Він викине виняток, якщо значення " strnull". Перевірте, що рядок не є нульовим та має принаймні один символ перед тим, як використовувати його.
атакоманський

@attacomsian ви маєте рацію, я оновлюю java-код, і для Kotlin ви можете використовувати str? .capitalize ()
Амір Хоссейн

22

Що ви хочете зробити, мабуть, це:

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

16

Привіт! Не могли б ви пояснити, як це реалізувати в моєму проекті? Я бачу будь-яке посилання для завантаження файлів у вашій URL-адресі. Спасибі
GrayFox

Цей метод застарілий. Будь ласка, використовуйте StringUtils від commons-lang
Fangming

12

Нижче рішення буде працювати.

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

Ви не можете використовувати toUpperCase () на примітивних char, але ви можете спершу зробити весь String to Uppercase, потім взяти перший char, а потім додати до підрядка, як показано вище.


toUpperCase є обмеженим.
Harpreet Sandhu - TheRootCoder

У питанні він намагався переключити Примітив на примітив, який не буде працювати.
Jijil Kakkadathu

1
ой. Я пропустив цю річ. (у)
Harpreet Sandhu - TheRootCoder

1
чудова відповідь шановний
Дулай Кулатунга


7

Найкоротший також:

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

Працювали для мене.


6

Встановіть рядок в нижній регістр, а потім встановіть перший лист на верхній так:

    userName = userName.toLowerCase();

а потім використовувати великі літери:

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

підрядка - це просто отримання шматочка більшого рядка, потім ми поєднуємо їх знову разом.


7
Як я розумію, перший рядок коду марний, оскільки решта рядка в будь-якому випадку встановлена ​​на малі регістри.
Håvard Nygård

6

Що з 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

Використовуйте цей корисний метод, щоб отримати всі перші літери з великої літери.

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


4

Ви також можете спробувати це:

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

Це краще (оптимізовано), ніж із використанням підрядків. (але не турбуватися про невелику струну)


4

Можна використовувати 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(), як це робиться автоматично.


4

В 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

якщо ви використовуєте ВЕСНА :

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


    return capitalize(name);

ПРИМІТКА. Якщо у вас вже є загальна залежність Apache, тоді подумайте про використання їх StringUtils.capitalize, як підказують інші відповіді.

ВПРОВАДЖЕННЯ: https://github.com/spring-projects/spring-framework/blob/64440a5f04a17b3728234afaa89f57766768decb/spring-core/src/main/java/org/springframework/util/StringUtils.java#L535-L555

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


4

БУДЕ РОБОТИ 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

Це лише для того, щоб показати вам, що ви не так помилялися.

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


1
+1 за "не так неправильно". Я вважаю за кращеCharacter.toString(name.charAt(0)) замість того, ""+name.charAt(0)щоб показувати, що я дійсно хочу зробити.
користувач85421

Немає перевірки нульової довжини .. Довжина може бути нульовою.
Кріспікс


3

Ви можете використовувати наступний код:

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

спробуйте це

Що цей метод робить, це те, що. Розгляньте, що слово "привіт світ", цей метод перетворить його на "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();

    }

Але цей код здається досить зрозумілим, всі методи легко зрозуміти за їхніми іменами. Але, дякую за ваш коментар, спробую зробити наступнішим чином досконаліше, я занадто довго лінуюся :-).
Амейн Махін

Працює як шарм!
TheVinceble

3

Надані відповіді - це використання великої літери лише з одного слова. використовуйте наступний код для використання великої літери в цілому.

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


3

Якщо введення є UpperCase, тоді використовуйте наступне:

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

Якщо значення вводу нижче, натисніть «Використовувати наступне»:

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

Ви можете використовувати наступний код:

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

2

Використання commons.lang.StringUtilsнайкращої відповіді:

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

Я вважаю це блискучим, оскільки він обертає рядок StringBuffer. Ви можете маніпулювати StringBuffer за своїм бажанням, хоча і використовуючи той самий екземпляр.


2

Ще один приклад, як можна зробити першу букву вводу з великої літери:

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)));
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.