Почему Символ Java.toUpperCase/toLowerCase не имеет параметра Locale, такого как String.метод touppercase/столоверчения
мне интересно, почему Character.toUpperCase/toLowerCase не имеет параметра Locale, например String.toUpperCase/toLowerCase.
Я должен сначала заглавный текст, который может быть на любом языке. У меня есть 2 решения:
-
использовать
Character.toUpperCaseString 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.toUpperCaseLocale 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. Маловероятно, что сообщество переполнения стека сможет дать вам ответ, который вы хотите.