it-swarm.com.ru

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

199
sumithra
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);
}
293
Rekin
160
Bozho

Укороченный/более быстрый код версии для прописных букв первой буквы строки:

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

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

58
Elenasys

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

Шаг 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());

Вот больше примеров, предоставленных Apache. это исключение бесплатно

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

Заметка:

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

28
Fangming

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

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);
19
Grodriguez
14
Zaki

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

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

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

11
Jijil Kakkadathu

Используйте WordUtils.capitalize(str) .

8
Suresh Kumar

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

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

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

5
Dassi Orleando
String str1 = "hello";
str1.substring(0, 1).toUpperCase()+str1.substring(1);
5
Aditya Parmar

Установите строку в нижний регистр, затем установите первую букву в верхний, как это:

    userName = userName.toLowerCase();

затем заглавную букву:

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

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

5
AlexZeCoder

В 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
Michael

Вы можете использовать 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
JDJ

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

попробуй это

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

    }
3
Ameen Maheen

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

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

3
Adeel Ansari
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);
    }
2
Krrish

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

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

Как прописать каждую первую букву Word в строке?

2
Manoj Ekanayaka
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
Doc Brown

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

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
Vimukthi_R

Вы также можете попробовать это:

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

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

2
jerjer

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

char[] array = value.toCharArray();

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

String result = new String(array);
2
Mohamed Abdullah J
System.out.println(Character.toString(A.charAt(0)).toUpperCase()+A.substring(1));

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

1
Germa Vinsmoke

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

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
David Navarro Astudillo

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

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

Затем с помощью метода 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
Dev d

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

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

Один из ответов был на 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
crix

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

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

}
1
Mulalo Madida

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

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

Один подход.

String input = "someТекст$T%$4čřЭ"; //Enter your text.
if (input == null || input.isEmpty()) {
    return "";
}

char [] chars = input.toCharArray();
chars[0] = chars[0].toUpperCase();
String res = new String(chars);
return res;

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

String s1 = input.substring(1).toUpperCase();
String s2 = input.substring(1, lenght);
String res = s1 + s2;

Или даже

//check if not null.
StringBuilder buf = new StringBuilder(input);
char ch = buf.getCharAt(0).toUpperCase();
buf.setCharAt(0, ch);
return buf.toString();
0
Yan Khonski

Используйте метод замены.

String newWord = Word.replace(String.valueOf(Word.charAt(0)), String.valueOf(Word.charAt(0)).toUpperCase());
0
Engine
public void capitalizeFirstLetter(JTextField textField) {

    try {

        if (!textField.getText().isEmpty()) {
            StringBuilder b = new StringBuilder(textField.getText());
            int i = 0;
            do {
                b.replace(i, i + 1, b.substring(i, i + 1).toUpperCase());
                i = b.indexOf(" ", i) + 1;
            } while (i > 0 && i < b.length());
            textField.setText(b.toString());
        }

    } catch (Exception e) {
        e.printStackTrace();
        JOptionPane.showMessageDialog(null, e, "Error", JOptionPane.ERROR_MESSAGE);
    }
}
0
Suresh

Этот код для заглавных букв каждого слова в тексте!

public String capitalizeText(String name) {
    String[] s = name.trim().toLowerCase().split("\\s+");
    name = "";
    for (String i : s){
        if(i.equals("")) return name; // or return anything you want
        name+= i.substring(0, 1).toUpperCase() + i.substring(1) + " "; // uppercase first char in words
    }
    return name.trim();
}
0
An Van Nguyen

Вы можете использовать класс WordUtils.

Предположим, что ваша строка "текущий адрес", а затем используйте 

**** сильный текстWordutils.capitaliz (Строка); output: текущий адрес

См. http://commons.Apache.org/proper/commons-lang/apidocs/org/Apache/commons/lang3/text/WordUtils.html

0
SANDEEP KIRWAI

Вы можете попробовать это

/**
 * capitilizeFirst(null)  -> ""
 * capitilizeFirst("")    -> ""
 * capitilizeFirst("   ") -> ""
 * capitilizeFirst(" df") -> "Df"
 * capitilizeFirst("AS")  -> "As"
 *
 * @param str input string
 * @return String with the first letter capitalized
 */
public String capitilizeFirst(String str)
{
    // assumptions that input parameter is not null is legal, as we use this function in map chain
    Function<String, String> capFirst = (String s) -> {
        String result = ""; // <-- accumulator

        try { result += s.substring(0, 1).toUpperCase(); }
        catch (Throwable e) {}
        try { result += s.substring(1).toLowerCase(); }
        catch (Throwable e) {}

        return result;
    };

    return Optional.ofNullable(str)
            .map(String::trim)
            .map(capFirst)
            .orElse("");
}
0
R. Gordeev

спасибо, что я прочитал некоторые из комментариев, и я пришел со следующим 

public static void main(String args[]) 
{
String myName = "nasser";
String newName = myName.toUpperCase().charAt(0) +  myName.substring(1);
System.out.println(newName );
}

Я надеюсь, что это помогает. Удачи 

0
Nasser Al kaabi

Из commons.lang.StringUtils лучший ответ: 

public static String capitalize (String str) {
int strLen;
return str! = null && (strLen = str.length ())! = 0? (новый StringBuffer (strLen)). append (Character.toTitleCase (str.charAt (0))). append (str.substring (1)). toString (): str;
}

я нахожу это блестящим, так как он оборачивает строку с помощью StringBuffer. Вы можете манипулировать StringBuffer по своему желанию, используя тот же экземпляр.

0
velocity

Только что переработанный код 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();
    }
0
Ruslan Podurets

Ответ от Ameen Mahheen хорош, но если у нас есть строка с двойным пробелом, например, «hello world», то sb.append получает исключение IndexOutOfBounds. Правильнее всего сделать тестирование перед этой строкой, выполнив:

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(" ");
                if (words[i].length() > 0) sb.append(Character.toUpperCase(words[i].charAt(0)) + words[i].subSequence(1, words[i].length()).toString().toLowerCase());
            }
        }
        return  sb.toString();
    }
0
Raphael Moraes

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

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)));
0
Aleksey Bykov
class CapitalizeWords
{
    public static void main(String[] args) 
    {
        String input ="welcome to kashmiri geeks...";

        System.out.println(input);

        String[] str = input.split(" ");

        for(int i=0; i< str.length; i++)
        {
            str[i] = (str[i]).substring(0,1).toUpperCase() + (str[i]).substring(1);
        }

        for(int i=0;i<str.length;i++)
        {
            System.out.print(str[i]+" ");
        }


    }
}
0
Maahi bhat

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

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

public static capitalize(String str)
{
    return this.substring(0, 1).toUpperCase() + this.substring(1)
}

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

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

str.capitalize()
0
Amir Hossein Ghasemi

В следующем примере также используются заглавные слова после специальных символов, таких как [/ -]

  public static String capitalize(String text) {
    char[] stringArray = text.trim().toCharArray();
    boolean wordStarted = false;
    for( int i = 0; i < stringArray.length; i++) {
      char ch = stringArray[i];
      if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || ch == '\'') {
        if( !wordStarted ) {
          stringArray[i] = Character.toUpperCase(stringArray[i]);
          wordStarted = true;
        } 
      } else {
        wordStarted = false;
      }
    }
    return new String(stringArray);
  }

Example:
capitalize("that's a beautiful/wonderful life we have.We really-do")

Output:
That's A Beautiful/Wonderful Life We Have.We Really-Do
0
Delorean

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

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

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

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

0
Raj Kumar
String s = "first second third fourth";

        int j = 0;
        for (int i = 0; i < s.length(); i++) {

            if ((s.substring(j, i).endsWith(" "))) {

                String s2 = s.substring(j, i);
                System.out.println(Character.toUpperCase(s.charAt(j))+s2.substring(1));
                j = i;
            }
        }
        System.out.println(Character.toUpperCase(s.charAt(j))+s.substring(j+1));
0
emre hamurcu