现在我正在做什么。
for (char c = 'a'; c <= 'z'; c++) {
alphabet[c - 'a'] = c;
}
但是有没有更好的方法呢? 类似于Scala的'a' to 'z'
char[] alphabet = "abcdefghijklmnopqrstuvwxyz".toCharArray();
char[] LowerCaseAlphabet = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
char[] UpperCaseAlphabet = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
这个getAlphabet
方法使用了与问题描述中相似的技术来生成任意语言的字母表。
定义任何语言的枚举,并调用getAlphabet
。
char[] armenianAlphabet = getAlphabet(LocaleLanguage.ARMENIAN);
char[] russianAlphabet = getAlphabet(LocaleLanguage.RUSSIAN);
// get uppercase alphabet
char[] currentAlphabet = getAlphabet(true);
System.out.println(armenianAlphabet);
System.out.println(russianAlphabet);
System.out.println(currentAlphabet);
I/System.out: 铡闸眨栅榨咋乍炸诈摘斋宅窄债寨瞻毡詹粘沾盏斩辗崭展蘸栈占战站湛謤謥謧謨謩謪謫
I/System.out: 邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌褉褋褌褍褎褏褑褔褕褖褗褘褜褝褞褟
I/System.out: ABCDEFGHIJKLMNOPQRSTUVWXYZ
private char[] getAlphabet() {
return getAlphabet(false);
}
private char[] getAlphabet(boolean flagToUpperCase) {
Locale locale = getResources().getConfiguration().locale;
LocaleLanguage language = LocaleLanguage.getLocalLanguage(locale);
return getAlphabet(language, flagToUpperCase);
}
private char[] getAlphabet(LocaleLanguage localeLanguage, boolean flagToUpperCase) {
if (localeLanguage == null)
localeLanguage = LocaleLanguage.ENGLISH;
char firstLetter = localeLanguage.getFirstLetter();
char lastLetter = localeLanguage.getLastLetter();
int alphabetSize = lastLetter - firstLetter + 1;
char[] alphabet = new char[alphabetSize];
for (int index = 0; index < alphabetSize; index++) {
alphabet[index] = (char) (index + firstLetter);
}
if (flagToUpperCase) {
alphabet = new String(alphabet).toUpperCase().toCharArray();
}
return alphabet;
}
private enum LocaleLanguage {
ARMENIAN(new Locale("hy"), 'ա', 'ֆ'),
RUSSIAN(new Locale("ru"), 'а','я'),
ENGLISH(new Locale("en"), 'a','z');
private final Locale mLocale;
private final char mFirstLetter;
private final char mLastLetter;
LocaleLanguage(Locale locale, char firstLetter, char lastLetter) {
this.mLocale = locale;
this.mFirstLetter = firstLetter;
this.mLastLetter = lastLetter;
}
public Locale getLocale() {
return mLocale;
}
public char getFirstLetter() {
return mFirstLetter;
}
public char getLastLetter() {
return mLastLetter;
}
public String getDisplayLanguage() {
return getLocale().getDisplayLanguage();
}
public String getDisplayLanguage(LocaleLanguage locale) {
return getLocale().getDisplayLanguage(locale.getLocale());
}
@Nullable
public static LocaleLanguage getLocalLanguage(Locale locale) {
if (locale == null)
return LocaleLanguage.ENGLISH;
for (LocaleLanguage localeLanguage : LocaleLanguage.values()) {
if (localeLanguage.getLocale().getLanguage().equals(locale.getLanguage()))
return localeLanguage;
}
return null;
}
}
这是一个有趣的Unicode解决方案:
int charAmount = 'z' - 'a' + 1;
char[] alpha = new char[charAmount];
for(int i = 0; i < charAmount ; i++){
alpha[i] = (char)('a' + i);
}
System.out.println(alpha); //abcdefghijklmnopqrstuvwxyz
这将生成字母表的小写版本。
如果您想要大写字母表,您可以在 ('a' + i)
处将 'a' 替换为 'A'。
char
保存 UTF-16 单元代码,其中一个或两个单元代码构成一个 Unicode 代码点。称其为 ASCII 会分散注意力。 - Tom Blodget^
或者至少加上 ~
,我会点赞的。 - Piotr Findeisenk
是多余的。只需使用 'a' + i
。 - shmosel在Java 8中使用Stream API,你可以这样做。
IntStream.rangeClosed('A', 'Z').mapToObj(var -> (char) var).forEach(System.out::println);
如果您正在使用Java 8
char[] charArray = IntStream.rangeClosed('A', 'Z')
.mapToObj(c -> "" + (char) c).collect(Collectors.joining()).toCharArray();
Stream<Character> CharStream = IntStream.rangeClosed('a', 'z').mapToObj(c -> (char) c);
,并从那时起使用它。https://dev59.com/JWEh5IYBdhLWcg3waC5t - Klemen Tusarchar[]
- 对于这种情况,使用流无法避免装箱和拆箱。 - Hulkstatic String[] AlphabetWithDigits = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"};
使用 io.vavr
public static char[] alphanumericAlphabet() {
return CharSeq
.rangeClosed('0','9')
.appendAll(CharSeq.rangeClosed('a','z'))
.appendAll(CharSeq.rangeClosed('A','Z'))
.toCharArray();
}
请检查一下,我确信你将得到从 a
到 z
的字母:
for (char c = 'a'; c <= 'z'; c++) {
al.add(c);
}
System.out.println(al);'
对于正在寻找Kotlin解决方案的Android开发人员,最终到达这里:
// Creates List<Char>
val chars1 = ('a'..'z').toList()
// Creates Array<Char> (boxed)
val chars2 = ('a'..'z').toList().toTypedArray()
// Creates CharArray (unboxed)
val chars3 = CharArray(26) { 'a' + it }
// Creates CharArray (unboxed)
val chars4 = ('a'..'z').toArray()
fun CharRange.toArray() = CharArray(count()) { 'a' + it }
若要了解我所说的"boxed"和"unboxed"是什么,请参见这篇文章。
非常感谢这个 Kotlin 讨论线程。
"abcdefghijklmnopqrstuvwxyz".toCharArray()
更好吗? - Pshemo