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

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

public String firstUpperCase(String word){
	if(word == null || word.isEmpty()) return "";//или return word;
	return word.substring(0, 1).toUpperCase() + word.substring(1);
}

word.substring(0, 1) — возвращает первую букву в слове
word.substring(0, 1).toUpperCase() — переводит первую букву в верхний регистр
word.substring(1) — добавляет остальные символы без изменения
Пример использования:

String var = "name";
System.out.println("get" + firstUpperCase(var) + "()");//Выведет: "getName()"

14 комментариев

  1. rashid:

    а если я передам null?

    • Naik:

      Если передать null, то будет выброшено исключение NullPointerException. Нужно или до вызова функции проверять значение на null, или уже в самой функции добавить проверку на null.
      Например:
      public String firstUpperCase(String word){
      if(word == null) return null;
      return word.substring(0, 1).toUpperCase() + word.substring(1);
      }

  2. Валерий Вырва:

    Да ладно null, а что будет если я передам пустую строку? Опять же ошибка будет.
    Почему бы не добавить эти две проверки (на null и на длину строки) сразу, почему нужно ждать когда к вам случайно кто-то заглянет в блог?

    • Naik:

      Добавил проверки: на null и на пустую строку.
      Всё же основная цель была показать как это сделать, а не писать готовую функцию.
      Потом возникает дилемма, что возвращать в случае null? Null или пустую строку, а выбор зависит от потребности. Может ещё trim добавить?

      • Валерий Вырва:

        > Потом возникает дилемма, что возвращать в случае null? Null или пустую строку, а выбор зависит от потребности.
        Для этого используются другие утилитные методы: emptyToNull, nullToEmpty

        > Может ещё trim добавить?
        Это еще зачем?

        Вы пишете пост (целый пост!) про «функцию» преобразующую первый символ в строке в верхний регистр. Эта «функция» практически ни о чём — кто не знает про String::substring и String::toUpperCase?
        И в этой простой «функции» у вас заложено 2 ошибки, которые по вашим словам не нужно реализовывать тут, а «до вызова функции проверять значение на null».

        Почему я вместо

        String name = nullToEmpty(firstUpperCase(someExternalValue));

        должен писать что-то типа:

        String name;
        if (someExternalValue == null || someExternalValue.isEmpty()) {
        name = "";
        } else {
        name = firstUpperCase(someExternalValue);
        }

  3. JavaCat:

    А хотите хохму? )
    Что будет, если я передам слово, в котором все буквы заглавные?

  4. Ilya:

    Спасибо автору очень помогло) и да некоторые может с этим и незнакомы)

  5. Eugene:

    Огромное спасибо автору за сэкономленное время!

  6. JavaWarior:

    Здравствуйте.А как мне сделать каждое слово в строке с большой буквы?Ввод с консоли BufferedReader

    • Naik:

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

          private static Pattern START = Pattern.compile("b");
       
          public static String allFirstUpper(String text){
              Matcher m = START.matcher(text);
              StringBuilder sb = new StringBuilder();
              int p = 0;
              while(m.find()){
                  String val = text.substring(p, m.start());
                  p = m.start();
                  sb.append(firstUpperCase(val));
              }
              sb.append(text.substring(p));
              return sb.toString();
          }
       
          public static String firstUpperCase(String word){
              if(word == null || word.isEmpty()) return "";//или return word;
              return word.substring(0, 1).toUpperCase() + word.substring(1);
          }

      p.s. Здесь реализация через регулярные выражения. \b — означает начальную границу слова.

      • Aid:

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

        public String firstUpperCase(String word){
        if (word.indexOf(» «)==-1){
        if(word == null || word.isEmpty()) return «»;
        return word.substring(0, 1).toUpperCase() + word.substring(1);
        } else {
        String aTmp[] = word.split(» «);
        String result = new String();
        for (int i=0;i<aTmp.length;i++){
        result += firstUpperCase(aTmp[i]);
        }
        return result;
        }
        }

  7. Максим:

    А как быть если я введу несколько слов через запятую например word = «string string»
    Хочется что-бы это отрабатывало для каждого слова, а отработает только для первого

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *