Как сделать заглавной первую букву строки в Java? - PullRequest
228 голосов
/ 11 октября 2010

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

Ответы [ 47 ]

3 голосов
/ 22 мая 2019

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

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

2 голосов
/ 14 декабря 2015

Посмотрите ACL WordUtils.

WordUtils.capitalize ("ваша строка") == "Ваша строка"

Как вводить прописные буквы в каждой первой букве слова встрока?

2 голосов
/ 31 июля 2015

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

char[] array = value.toCharArray();

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

String result = new String(array);
2 голосов
/ 30 мая 2019

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

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

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

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

2 голосов
/ 21 декабря 2016
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();
}
1 голос
/ 11 января 2017

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

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"));
}
1 голос
/ 06 декабря 2018

Один из ответов был на 95% правильным, но на моем устройстве unitTest @Ameen Maheen решение оказалось почти безупречным. За исключением того, что перед тем, как входные данные преобразуются в массив String, вы должны обрезать входные данные. Итак, идеальный:

private String convertStringToName(String name) {
        name = name.trim();
        String[] words = name.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();
    }
1 голос
/ 15 марта 2018

Чтобы сделать первый символ каждого слова в строке заглавным,

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

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

public class Test {  
     public static void main(String[] args)
     {
         String str= "my name is khan";        // string
         String words[]=str.split("\\s");      // split each words of above string
         String capitalizedWord = "";         // create an empty string

         for(String w:words)
         {  
              String first = w.substring(0,1);    // get first character of each word
              String f_after = w.substring(1);    // get remaining character of corresponding word
              capitalizedWord += first.toUpperCase() + f_after+ " ";  // capitalize first character and add the remaining to the empty string and continue
         }
         System.out.println(capitalizedWord);    // print the result
     }
}
1 голос
/ 07 мая 2016

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

static String toTitle (String s) {
      String s1 = s.substring(0,1).toUpperCase();
      String sTitle = s1 + s.substring(1);
      return sTitle;
 }
1 голос
/ 08 августа 2018

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

private String capitalize(String txt){ 
  List<String> finalTxt=new ArrayList<>();

  if(txt.contains("_")){
       txt=txt.replace("_"," ");
  }

  if(txt.contains(" ") && txt.length()>1){
       String[] tSS=txt.split(" ");
       for(String tSSV:tSS){ finalTxt.add(capitalize(tSSV)); }  
  }

  if(finalTxt.size()>0){
       txt="";
       for(String s:finalTxt){ txt+=s+" "; }
  }

  if(txt.endsWith(" ") && txt.length()>1){
       txt=txt.substring(0, (txt.length()-1));
       return txt;
  }

  txt = txt.substring(0,1).toUpperCase() + txt.substring(1).toLowerCase();
  return txt;
}
...