Почему Символ Java.toUpperCase/toLowerCase не имеет параметра Locale, такого как String.метод touppercase/столоверчения
мне интересно, почему Character.toUpperCase/toLowerCase
не имеет параметра Locale, например String.toUpperCase/toLowerCase
.
Я должен сначала заглавный текст, который может быть на любом языке. У меня есть 2 решения:
-
использовать
Character.toUpperCase
String text = "stack overflow"; StringBuilder sb = new StringBuilder(text); sb.setCharAt(0, Character.toUpperCase(sb.charAt(0))); // No Locale parameter here. String out = sb.toString(); //Out: Stack overflow
-
использовать
String.toUpperCase
Locale myLocale = new Locale(locateId); String text = "stack overflow"; String text1 = text.substring(0,1).toUpperCase(myLocale ); String text2 = text.substring(1); String out = text1 + text2; // Out: Stack overflow
для моего языка. Оба пути имеют одинаковый результат.
мой вопрос есть:
поскольку текст может быть на любом языке. Какой путь мне следует использовать?
почему
Character.toUpperCase/toLowerCase
не имеет параметра Locale, потому что междуCharacter.toUpperCase/toLowerCase
иString.toUpperCase/toLowerCase
потому что строка-это массив символов.
3 ответов
С Character#toUpperCase(int)
Javadoc,
в общем,
String.toUpperCase()
следует использовать для сопоставления символов в верхнем регистре.String
методы отображения случая имеют несколько преимуществ надCharacter
методы отображения случая.String
методы сопоставления регистров могут выполнять сопоставления с учетом локали, контекстно-зависимые сопоставления и сопоставления символов 1:M, тогда какCharacter
методы сопоставления case не могут.
Итак, ответ ваш второй пример (String.toUpperCase
)
Как говорит Javadoc:
В общем, строка.toUpperCase () следует использовать для сопоставления символов в верхнем регистре. Методы сопоставления строковых регистров имеют несколько преимуществ перед методами сопоставления символьных регистров. Методы сопоставления строковых регистров могут выполнять сопоставления с учетом локали, контекста и символов 1:M, тогда как методы сопоставления символьных регистров не могут.
поэтому используйте String.toUppercase ()
Если вопрос "какой метод я должен использовать", то этот вопрос является дубликатом преобразование строки в регистр заголовка и правильный ответ либо
- Apache Commons Lang
StringUtils.captitalize()
- Javadoc at http://commons.apache.org/proper/commons-lang/javadocs/api-2.5/org/apache/commons/lang/StringUtils.html - Apache Commons Lang
WordUtils.capitalize()
- Javadoc at http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/text/WordUtils.html. Это переводит каждое отдельное слово.
Если вопрос "почему не Character
имейте методы изменения регистра с учетом локали", тогда единственный способ получить ответ - проконсультироваться с одним из дизайнеров языка Java. Маловероятно, что сообщество переполнения стека сможет дать вам ответ, который вы хотите.