string.letters: złączonych łańcuchów małymi literami wielkimi opisanych poniżej. Konkretna wartość to zależna od ustawień regionalnych i zostanie zaktualizowana po wywołaniu funkcji locale.setlocale().
Ja zmodyfikowałem odpowiedź od Michaela Borgwardta. W moim realizacji istnieją dwa wymienia lowerCases i upperCases z dwóch powodów:
string.letters jest lowercases obserwowani przez uppercases.
Java Character.isLetter(char) jest czymś więcej niż tylko uppercases i lowercases, więc użycie Character.isLetter (char) powróci do dużo wyników w niektórych zestawów znaków, na przykład "windows-1252"
Od Api-Doc: Character.isLetter(char):
postać jest uważana za list, jeżeli jego ogólny typ kategoria, dostarczone przez Character.getType (cH), jest jedną z następujących czynności:
* UPPERCASE_LETTER
* LOWERCASE_LETTER
* TITLECASE_LETTER
* MODIFIER_LETTER
* OTHER_LETTER
Nie wszystkie litery mają wielkość liter.Wiele znaków to litery, ale nie są one ani wielkie, ani małe, ani tytułowe.
Więc jeśli string.letters powinien zwrócić tylko lowercases i uppercases The TITLECASE_LETTER, , MODIFIER_LETTER i OTHER_LETTER znaków mają być ignorowane.
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();
}
Dodatkowo: zachowanie string.letters zmian przy zmianie ustawienia regionalne. To może nie dotyczyć mojego rozwiązania, ponieważ zmiana domyślnego ustawienia narodowego nie zmienia domyślnego zestawu znaków. Od apiDoc:
Domyślna charset określa podczas uruchamiania wirtualnych maszyn i zazwyczaj zależy od lokalizacji i charset bazowego systemu operacyjnego .
Domyślny zestaw znaków nie może zostać zmieniony w ramach uruchomionej maszyny JVM. Tak więc zachowanie "zmiany ustawień" string.letters nie może zostać zrealizowane tylko za pomocą Locale.setDefault (Locale). Ale zmienia domyślne ustawienia regionalne to i tak zły pomysł:
Ponieważ zmienia domyślne ustawienia regionalne mogą wpływają na wiele różnych obszarów funkcjonalności, metoda ta powinna być stosowane tylko wtedy, gdy rozmówca jest przygotowany do Reinitialize locale wrażliwych kod działający w obrębie tej samej maszyny wirtualnej Java .
Uważam, że wynik Pythona jest całkowicie niepoprawny. A co z ä, é lub ß? –
Przypuszczam, że byłoby pomocne, jeśli dałem dokumentację na 'string.letters' Pythona: http://docs.python.org/library/string.html#string.litery Jest oparty na ASCII, więc zwrócona wartość zależy od systemu. –
jak "wartość zależy od systemu" wynika z "To jest oparte na ASCII"? ASCII jest dobrze zdefiniowany i jest dokładnie taki sam w każdym systemie. Więc jeśli byłby naprawdę oparty na ASCII, wynik byłby zawsze taki sam. "ASCII" nie jest synonimem "jakiegokolwiek 8-bitowego kodowania znaków". –