string.letters:
Описана конкатенация строк в нижнем и верхнем регистре
ниже. Конкретное значение
зависит от локали и будет обновляться
когда вызывается locale.setlocale ().
Я изменил ответ от Майкла Боргвардта. В моей реализации есть два списка lowerCases и upperCases по двум причинам:
string.letters - строчные буквы, за которыми следуют прописные буквы.
Java Character.isLetter (char) - это больше, чем просто верхний и нижний регистры, поэтому использование Character.isLetter (char) вернет много результатов в некоторых наборах символов, например, "windows- 1252"
С Api-Doc: Character.isLetter (char) :
Персонаж считается
письмо, если его общий тип категории,
предоставляется Character.getType (ch), является
любой из следующих:
* UPPERCASE_LETTER
* LOWERCASE_LETTER
* TITLECASE_LETTER
* MODIFIER_LETTER
* OTHER_LETTER
Не все буквы имеют регистр. Много
символы являются буквами, но не являются
Прописные, ни строчные, ни заглавные.
Так что если string.letters должен возвращать только строчные и прописные буквы, TITLECASE_LETTER,
, Символы MODIFIER_LETTER и OTHER_LETTER должны игнорироваться.
public static String allLetters(final Charset charset) {
final CharsetEncoder encoder = charset.newEncoder();
final StringBuilder lowerCases = new StringBuilder();
final StringBuilder upperCases = new StringBuilder();
for (char c = 0; c < Character.MAX_VALUE; c++) {
if (encoder.canEncode(c)) {
if (Character.isUpperCase(c)) {
upperCases.append(c);
} else if (Character.isLowerCase(c)) {
lowerCases.append(c);
}
}
}
return lowerCases.append(upperCases).toString();
}
Дополнительно:
поведение string.letters изменяется при изменении локали. Возможно, это не относится к моему решению, потому что изменение языка по умолчанию не меняет кодировку по умолчанию. Из apiDoc:
Определена кодировка по умолчанию
во время запуска виртуальной машины и
как правило, зависит от региона и
кодировка основной операционной
система.
Полагаю, кодировка по умолчанию не может быть изменена в запущенной JVM. Таким образом, поведение «изменить язык» для string.letters не может быть реализовано только с помощью Locale.setDefault (Locale). Но в любом случае изменение языка по умолчанию - плохая идея:
Поскольку изменение локали по умолчанию может
влияет на множество различных областей
функциональность, этот метод должен только
использоваться, если вызывающий абонент готов к
переинициализировать код, чувствительный к локали
работает в том же Java Virtual
Машина.