Как сделать заглавной первую букву строки в 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
62 ответа
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);
}
Укороченный / более быстрый код версии для заглавных букв первой буквы строки:
String name = "stackru";
name = name.substring(0,1).toUpperCase() + name.substring(1).toLowerCase();
значение name
является "Stackru"
Используйте общую библиотеку 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
также включен в эту библиотеку, но не рекомендуется. Пожалуйста , не используйте это.
если вы используете ВЕСНУ:
import static org.springframework.util.StringUtils.capitalize;
...
return capitalize(name);
ПРИМЕЧАНИЕ. Если у вас уже есть зависимость Apache Common Lang, рассмотрите возможность использования их StringUtils.capitalize, как предлагают другие ответы.
Для пользователей Java:
просто расширение для заглавных букв каждой строки.
public static capitalize(String str)
{
return this.substring(0, 1).toUpperCase() + this.substring(1)
}
После этого просто позвоните str = capitalize(str)
Для пользователей Kotlin просто позвоните:
str.capitalize()
Что вы хотите сделать, это, вероятно, это:
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);
Ниже решение будет работать.
String A = "stackOverflow";
String ACaps = A.toUpperCase().charAt(0)+A.substring(1,A.length());
//Will print Stackru
Вы не можете использовать toUpperCase() на примитивном символе, но вы можете сначала сделать всю строку в верхнем регистре, затем взять первый символ, а затем добавить к подстроке, как показано выше.
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);
}
String str1 = "hello";
str1.substring(0, 1).toUpperCase()+str1.substring(1);
Вот моя подробная статья по теме для всех возможных вариантов использования заглавной буквы в строке в Android.
Метод написания заглавной буквы в строке в Java
public static String capitalizeString(String str) {
String retStr = str;
try { // We can face index out of bound exception if the string is null
retStr = str.substring(0, 1).toUpperCase() + str.substring(1);
}catch (Exception e){}
return retStr;
}
Метод использования заглавной буквы в строке в КОТЛИН
fun capitalizeString(str: String): String {
var retStr = str
try { // We can face index out of bound exception if the string is null
retStr = str.substring(0, 1).toUpperCase() + str.substring(1)
} catch (e: Exception) {
}
return retStr
}
БУДЕТ РАБОТАТЬ 101%
public class UpperCase {
public static void main(String [] args) {
String name;
System.out.print("INPUT: ");
Scanner scan = new Scanner(System.in);
name = scan.next();
String upperCase = name.substring(0, 1).toUpperCase() + name.substring(1);
System.out.println("OUTPUT: " + upperCase);
}
}
Самый короткий тоже:
String message = "my message";
message = Character.toUpperCase(message.charAt(0)) + message.substring(1);
System.out.println(message) // Will output: My message
Работал на меня.
Установите строку в нижний регистр, затем установите первую букву в верхний, как это:
userName = userName.toLowerCase();
затем заглавную букву:
userName = userName.substring(0, 1).toUpperCase() + userName.substring(1).toLowerCase();
подстрока просто получает кусок большей строки, затем мы объединяем их вместе.
Простое решение! не требует какой-либо внешней библиотеки, он может обрабатывать пустую или одну буквенную строку.
private String capitalizeFirstLetter(@NonNull String str){
return str.length() == 0 ? str
: str.length() == 1 ? str.toUpperCase()
: str.substring(0, 1).toUpperCase() + str.substring(1).toLowerCase();
}
В 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));
Как насчет 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);
}
}
Ты можешь использовать 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()
, как это делается автоматически.
Вы также можете попробовать это:
String s1 = br.readLine();
char[] chars = s1.toCharArray();
chars[0] = Character.toUpperCase(chars[0]);
s1= new String(chars);
System.out.println(s1);
Это лучше (оптимизировано), чем с использованием подстроки. (но не беспокойтесь о маленькой струне)
Чтобы получить первую заглавную букву и другие желающие меньшие, вы можете использовать приведенный ниже код. Я сделал через функцию подстроки.
String currentGender="mAlE";
currentGender=currentGender.substring(0,1).toUpperCase()+currentGender.substring(1).toLowerCase();
Здесь substring(0,1).toUpperCase() преобразует первую заглавную букву, а substring(1).toLowercase() преобразует всю оставшуюся букву в малый регистр.
ВЫВОД:
мужчина
Текущие ответы либо неверны, либо чрезмерно усложняют эту простую задачу. Проведя небольшое исследование, я придумал два подхода:
1. Струны substring()
Метод
public static String capitalize(String str) {
if(str== null || str.isEmpty()) {
return str;
}
return str.substring(0, 1).toUpperCase() + str.substring(1);
}
Примеры:
System.out.println(capitalize("java")); // Java
System.out.println(capitalize("beTa")); // BeTa
System.out.println(capitalize(null)); // null
2. Apache Commons Lang
Библиотека Apache Commons Lang предоставляет StringUtils
класс для этой цели:
System.out.println(StringUtils.capitalize("apache commons")); // Apache commons
System.out.println(StringUtils.capitalize("heLLO")); // HeLLO
System.out.println(StringUtils.uncapitalize(null)); // null
Не забудьте добавить следующую зависимость к вашему pom.xml
файл:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.9</version>
</dependency>
Существующие ответы либо
- неправильно: они думают, что
char
- это отдельный символ (кодовая точка), в то время как это слово UTF-16, которое может быть половиной суррогатной пары, или - использовать библиотеки, что само по себе неплохо, но требует добавления зависимостей в ваш проект, или
- используйте Java 8 Streams, что вполне допустимо, но не всегда возможно.
Давайте посмотрим на суррогатные символы (каждый такой символ состоит из двух слов UTF-16 - Javachar
s) и может иметь варианты в верхнем и нижнем регистре:
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)));
Многие из них могут выглядеть для вас как "тофу" (□), но в основном это допустимые символы редких шрифтов, и некоторые гарнитуры их поддерживают.
Например, давайте посмотрим на Deseret Small Letter Long I (), 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")); // ->
}
Смотрите также:
- суррогатные пары Что такое "суррогатная пара" в Java?
- верхний регистр и регистр заголовка /questions/3822960/v-chem-raznitsa-mezhdu-charactertouppercase-i-charactertotitlecase/3822968#3822968
Если Input является UpperCase, тогда используйте следующее:
str.substring (0, 1).toUpperCase () + str.substring (1).toLowerCase ();
Если Input является LowerCase, тогда используйте следующее:
str.substring (0, 1).toUpperCase () + str.substring (1);
Попробуй это
Этот метод состоит в том, что рассмотрим слово "привет мир", которое этот метод превратит в "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();
}
Вы можете использовать следующий код:
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);
}
Из 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 по своему желанию, используя тот же экземпляр.
Это будет работать
char[] array = value.toCharArray();
array[0] = Character.toUpperCase(array[0]);
String result = new String(array);
Ответы даны только для заглавных букв только в одном слове. используйте следующий код, чтобы использовать заглавную строку
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