Как использовать первую букву строки в 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
Ответы
Ответ 1
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);
}
Ответ 2
StringUtils.capitalize(..)
из commons-lang
Ответ 3
Коротко/более быстрый код версии для заглавной буквы первой строки строки:
String name = "stackoverflow";
name = name.substring(0,1).toUpperCase() + name.substring(1).toLowerCase();
значение name
равно "Stackoverflow"
Ответ 4
Используйте общую библиотеку Apache. Освободите свой мозг от этих материалов и избегайте Null Pointer & Index Out of Bound Exceptions
Шаг 1:
Импортируйте библиотеку apache common lang, помещая это в зависимости build.gradle
compile 'org.apache.commons:commons-lang3:3.6'
Шаг 2:
Если вы уверены, что ваша строка имеет строчный регистр, или все, что вам нужно, это инициализировать первую букву,
StringUtils.capitalize(yourString);
Если вы хотите убедиться, что только первая буква toLowerCase()
, например, сделать это для enum
, toLowerCase()
вызовите 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
также включен в эту библиотеку, но устарел. Пожалуйста , не используйте это.
Ответ 5
Что вы хотите сделать, вероятно, это:
s1 = name.substring(0, 1).toUpperCase() + name.substring(1);
(преобразует сначала char в верхний регистр и добавляет оставшуюся часть исходной строки)
Кроме того, вы создаете считыватель потока ввода, но никогда не читаете ни одной строки. Таким образом, name
всегда будет null
.
Это должно работать:
BufferedReader br = new InputstreamReader(System.in);
String name = br.readLine();
String s1 = name.substring(0, 1).toUpperCase() + name.substring(1);
Ответ 6
WordUtils.capitalize(java.lang.String)
из Apache Commons.
Ответ 7
Ниже будет работать решение.
String A = "stackOverflow";
String ACaps = A.toUpperCase().charAt(0)+A.substring(1,A.length());
//Will print StackOverflow
Вы не можете использовать toUpperCase() для примитивного символа, но сначала можете сделать всю строку в верхнем регистре, а затем взять первый символ, а затем добавить к подстроке, как показано выше.
Ответ 8
Для пользователей Java:
просто вспомогательный метод для заглавных букв каждой строки.
public static String capitalize(String str)
{
if(str == null) return str;
return str.substring(0, 1).toUpperCase() + str.substring(1);
}
После этого просто позвоните str = capitalize(str)
Для пользователей Kotlin просто позвоните:
str.capitalize()
Ответ 9
Используйте WordUtils.capitalize(str)
.
Ответ 10
Установите строку в нижний регистр, затем установите первую букву в верхнюю часть следующим образом:
userName = userName.toLowerCase();
чтобы заглавная буква первой буквы:
userName = userName.substring(0, 1).toUpperCase() + userName.substring(1).toLowerCase();
Подстрока просто получает часть большей строки, затем мы объединяем их вместе.
Ответ 11
Как насчет 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);
}
}
Ответ 12
Самый короткий:
String message = "my message";
message = Character.toUpperCase(message.charAt(0)) + message.substring(1);
System.out.println(message) // Will output: My message
Работал для меня.
Ответ 13
String str1 = "hello";
str1.substring(0, 1).toUpperCase()+str1.substring(1);
Ответ 14
Вы также можете попробовать следующее:
String s1 = br.readLine();
char[] chars = s1.toCharArray();
chars[0] = Character.toUpperCase(chars[0]);
s1= new String(chars);
System.out.println(s1);
Это лучше (оптимизировано), чем при использовании подстроки. (но не беспокоиться о маленькой строке)
Ответ 15
Вы можете использовать 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()
, поскольку это делается автоматически.
Ответ 16
В 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));
Ответ 17
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);
}
Ответ 18
Это просто для того, чтобы показать вам, что вы не ошибаетесь.
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()
.;)
Ответ 19
Попробуй это
Что этот метод делает, так это то, что, рассмотрим слово "мир привет", этот метод превратит его в "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();
}
Ответ 20
Это будет работать
char[] array = value.toCharArray();
array[0] = Character.toUpperCase(array[0]);
String result = new String(array);
Ответ 21
Вы можете использовать следующий код:
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);
}
Ответ 22
Ответы даны только для заглавных букв только в одном слове. используйте следующий код, чтобы использовать заглавную строку
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
Ответ 23
Если для входного параметра задан UpperCase, используйте следующее:
str.substring(0, 1).toUpperCase() + str.substring(1).toLowerCase();
Если для Input задано значение LowerCase, используйте следующее:
str.substring(0, 1).toUpperCase() + str.substring(1);
Ответ 24
Посмотрите на ACL WordUtils.
WordUtils.capitalize( "ваша строка" ) == "Ваша строка"
Как в верхнем регистре каждая первая буква слова в строке?
Ответ 25
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();
}
Ответ 26
Вы можете использовать следующий код:
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"));
}
Ответ 27
Еще один пример, как вы можете сделать первую букву пользовательского ввода с заглавной буквы:
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)));
Ответ 28
Существующие ответы либо
- неверно: они думают, что
char
- это отдельный символ (кодовая точка), в то время как это слово UTF-16, которое может быть половиной суррогатной пары или
- использовать библиотеки, которые сами по себе неплохие, но требуют добавления зависимостей в ваш проект, или
- использовать потоки Java 8, что совершенно правильно, но не всегда возможно.
Давайте посмотрим на суррогатные символы (каждый такой символ состоит из двух слов UTF-16 - Java char
) и может иметь прописные и строчные буквы:
IntStream.rangeClosed(0x01_0000, 0x10_FFFF)
.filter(ch -> Character.toUpperCase(ch) != Character.toLowerCase(ch))
.forEach(ch -> System.out.print(new String(new int[] { ch }, 0, 1)));
Многие из них могут выглядеть для вас как "тофу" (□), но в основном они являются действительными символами редких сценариев, и некоторые шрифты поддерживают их.
Например, давайте посмотрим на маленькую букву Дезерет Long я (𐐨), U + 10428, "\uD801\uDC28"
:
System.out.println("U+" + Integer.toHexString(
"\uD801\uDC28".codePointAt(0)
)); // U+10428
System.out.println("U+" + Integer.toHexString(
Character.toTitleCase("\uD801\uDC28".codePointAt(0))
)); // U+10400 — ok! capitalized character is another code point
System.out.println("U+" + Integer.toHexString(new String(new char[] {
Character.toTitleCase("\uD801\uDC28".charAt(0)), "\uD801\uDC28".charAt(1)
}).codePointAt(0))); // U+10428 — oops! — cannot capitalize an unpaired surrogate
Таким образом, кодовая точка может начинаться с заглавной буквы даже в тех случаях, когда char
не может быть.
Учитывая это, давайте напишем правильный (и совместимый с Java 1.5!) Капитализатор:
@Contract("null -> null")
public static CharSequence capitalize(CharSequence input) {
int length;
if (input == null || (length = input.length()) == 0) return input;
return new StringBuilder(length)
.appendCodePoint(Character.toTitleCase(Character.codePointAt(input, 0)))
.append(input, Character.offsetByCodePoints(input, 0, 1), length);
}
И проверьте, работает ли он:
public static void main(String[] args) {
// ASCII
System.out.println(capitalize("whatever")); // w -> W
// UTF-16, no surrogate
System.out.println(capitalize("что-то")); // ч -> Ч
// UTF-16 with surrogate pairs
System.out.println(capitalize("\uD801\uDC28")); // 𐐨 -> 𐐀
}
Смотрите также:
Ответ 29
Многие из ответов очень полезны, поэтому я использовал их для создания метода, чтобы превратить любую строку в заголовок (первый символ заглавный):
static String toTitle (String s) {
String s1 = s.substring(0,1).toUpperCase();
String sTitle = s1 + s.substring(1);
return sTitle;
}
Ответ 30
Просто переработал код 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();
}