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

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

String output = input.substring(0, 1).toUpperCase() + input.substring(1);

Мне это кажется очень грязным... есть ли прямой или элегантный способ...


person Suresh Atta    schedule 10.06.2013    source источник
comment
StringUtils.capitalize()? Искать элегантность в Java... ну, есть лучшие ROI. Утилиты существуют не просто так.   -  person Dave Newton    schedule 10.06.2013
comment
Нужно ли учитывать локаль? В каждой локали свои правила изменения регистра букв.   -  person erickson    schedule 10.06.2013
comment
@erickson Нет необходимости. Мне достаточно английского.   -  person Suresh Atta    schedule 10.06.2013
comment
То же, что stackoverflow.com/ вопросов/3904579/ (хотя этот вопрос сформулирован более четко).   -  person Jonik    schedule 10.06.2013


Ответы (7)


Как насчет этого:

String output = Character.toUpperCase(input.charAt(0)) + input.substring(1);

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

person arshajii    schedule 10.06.2013
comment
Я думаю, что Марко имел в виду, что или null не удастся; StringUtils.capitalize не подведет. - person Joop Eggen; 10.06.2013
comment
@JoopEggen Это точно такое же поведение, как исходный код OP, тогда как StringUtils.capitalize - нет. - person arshajii; 10.06.2013
comment
Я даже не понимаю, почему за это проголосовали, на мой взгляд, это лучший метод, если я что-то не упустил - person TootsieRockNRoll; 26.04.2014
comment
StringUtils.capitalize( "fred from jupiter" ); производит "Fred from jupiter". Это все, что вам нужно! - person udoline; 29.05.2019

Вам следует взглянуть на StringUtils класс из Apache Commons Lang lib — он имеет метод .capitalize()

Описание из библиотеки:

Делает строку заглавной, изменяя первую букву на заглавную в соответствии с Character.toTitleCase(char). Никакие другие буквы не меняются.

person user    schedule 10.06.2013
comment
Обратите внимание, что если вы хотите сделать заглавной только первую букву (скажем, для форматирования имени), вам может потребоваться перевести всю строку в нижний регистр перед запуском Capitalize, если вы подозреваете, что в вашей строке уже могут быть заглавные буквы. Из JavaDoc: StringUtils.capitalize(cAt) = CAt - person Mark F Guerra; 13.08.2015
comment
Заглавная будет делать заглавной первую букву каждого слова, а не только первую. - person FrankMonza; 08.07.2017
comment
StringUtils.capitalize( "fred from jupiter" ); производит "Fred from jupiter". Только первый символ из объекта String будет в верхнем регистре. - person udoline; 29.05.2019

Предполагая, что вы можете использовать Java 8, вот функциональный способ, о котором никто не просил...

import java.util.Optional;
import java.util.stream.IntStream;

public class StringHelper {
    public static String capitalize(String source) {
        return Optional.ofNullable(source)
            .map(str -> IntStream.concat(
                str.codePoints().limit(1).map(Character::toUpperCase),
                str.codePoints().skip(1)))
            .map(stream -> stream.toArray())
            .map(arr -> new String(arr, 0, arr.length))
            .orElse(null);
    }
}

Он элегантен тем, что обрабатывает случаи нулевых и пустых строк без каких-либо условных операторов.

person souldzin    schedule 29.09.2016
comment
StringUtils.capitalize( "fred from jupiter" ); производит "Fred from jupiter". Это меньше исходного кода... :D - person udoline; 29.05.2019

Character.toString(a.charAt(0)).toUpperCase()+a.substring(1)

P.S = a это строка.

person Germa Vinsmoke    schedule 29.10.2017

Вот, подержите мое пиво

String foo = "suresh";
String bar = foo.toUpperCase();
if(bar.charAt[0] == 'S'){
   throw new SuccessException("bar contains 'SURESH' and has the first letter capital").
}
person Fanick    schedule 01.04.2018

person    schedule
comment
Если я ввожу строку типа _123 (начиная с пробела), она выдает NullPointerException. Ваш ответ также кажется немного сложным по сравнению с другими. - person pzaenger; 23.08.2014
comment
ну, мало того, моя программа должна еще и NullPointerException кидать, если в конце добавить пробел. Я не делал эти проверки, вы можете использовать регулярное выражение, если хотите... Я просто дал набросок того, как это можно реализовать. - person Anubhav; 24.08.2014

person    schedule
comment
Пожалуйста, не просто публикуйте код, который может быть непонятен ОП. Объясните свой ответ пошагово и дайте совет. - person mastov; 08.07.2015
comment
Мой код теперь кажется мне более красивым :) Спасибо за ответ. - person Suresh Atta; 09.07.2015