生成字母表中所有字母的数组的更好方法


73

现在我在做

for (char c = 'a'; c <= 'z'; c++) {
    alphabet[c - 'a'] = c;
}

但是有更好的方法吗?类似于Scala的'a' to 'z'


3
您可以指定用例吗?您在哪里需要阵列?
罗希特·贾因

9
“更好”是什么意思。是"abcdefghijklmnopqrstuvwxyz".toCharArray()更好?
Pshemo

2
请注意,以上内容在某种程度上人为地取决于以下事实:ASCII / Unicode中的所有小写罗马字母都是连续的。例如,在EBCDIC中将无法使用。
热门点击2013年

3
更好的是,我只是希望代码看起来更好。我不太在意表演。
2013年

5
哪个字母?还有比您想象的更多的东西。
Raedwald 2013年

Answers:


191

我认为这样可以使操作更简洁,您不必处理减法和索引编制:

char[] alphabet = "abcdefghijklmnopqrstuvwxyz".toCharArray();

5
您可以根据需要轻松添加其他字符。
热门点击2013年

2
嗯,认为可能有一种更清洁的方法可以完成,而无需输入所有内容或循环。:(我想我会去的。谢谢!
Stupid.Fat.Cat 2013年

@HunterMcMillen Java源文件Unicode(因此,在字符串文字中,这就是您所拥有的,并且可以添加所有内容)。
Tom Blodget 2015年

Swift 2:让字母= Array(“ ABCDEFGHIJKLMNOPQRSTUVWXYZ” .characters)
维克多·库切拉

1
@Thilo可能,但并非所有用户都可能使用相同的字母,因此您处于“我们是否将所有字母都存储为常量?”这一棘手的情况。或“由于某些字母很大,我们甚至可以合理地做到这一点吗?”
亨特·麦克米伦

36
char[] alphabet = {'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'};

17
我真的想要这个!感谢您帮助我复制粘贴:)
Ranjith V

15

这是一个有趣的Unicode解决方案。

char[] alpha = new char[26]
for(int i = 0; i < 26; i++){
    alpha[i] = (char)(97 + i)
}

这会生成小写字母的字母表,如果要大写,可以将“ 97”替换为“ 65”。

希望这可以帮助。


1
char保留一个UTF-16单位代码,其中一个或两个组成一个Unicode代码点。称它为ASCII会分散这些事实。
Tom Blodget 2015年

如果您也添加^或至少添加内容,我将对此表示支持~
Piotr Findeisen

k是多余的。做吧'a' + i
shmosel

13

在具有Stream API的Java 8中,您可以执行此操作。

IntStream.rangeClosed('A', 'Z').mapToObj(var -> (char) var).forEach(System.out::println);

12

将任何语言定义为枚举,并调用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;
    }
}

8

如果您使用的是Java 8

char[] charArray = IntStream.rangeClosed('A', 'Z')
    .mapToObj(c -> "" + (char) c).collect(Collectors.joining()).toCharArray();

1
嗯,是的-由于没有CharStream,因此似乎没有使用流的好的解决方案。如果您添加一些解释,我什至可以投票赞成,尽管我不推荐这种方法-绝不比循环好。
绿巨人

1
@Hulk:可以,但是您可以返回aStream<Character> CharStream = IntStream.rangeClosed('a', 'z').mapToObj(c -> (char) c);并从那时开始使用它。stackoverflow.com/questions/22435833/...
Klemen Tusar

@techouse当然可以,但是OP想要char[]-为此,使用流无法避免装箱和拆箱。
绿巨人


4
static 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"};

有史以来最完美的答案
ucMedia

2

io.vavr

public static char[] alphanumericAlphabet() {
    return CharSeq
            .rangeClosed('0','9')
            .appendAll(CharSeq.rangeClosed('a','z'))
            .appendAll(CharSeq.rangeClosed('A','Z'))
            .toCharArray();
}

写一些解释。
Gufran Hasan '18

2

根据汤姆·托马斯的回答,这里有一些替代方案。

字符数组:

        char[] list = IntStream.concat(
                IntStream.rangeClosed('0', '9'),
                IntStream.rangeClosed('A', 'Z')
        ).mapToObj(c -> (char) c+"").collect(Collectors.joining()).toCharArray();

字符串数组:

注意:如果您的定界符也是值之一,也将无法正常工作。

        String[] list = IntStream.concat(
                IntStream.rangeClosed('0', '9'),
                IntStream.rangeClosed('A', 'Z')
        ).mapToObj(c -> (char) c+",").collect(Collectors.joining()).split(",");

字符串列表:

注意:如果您的定界符也是值之一,也将无法正常工作。

        List<String> list = Arrays.asList(IntStream.concat(
                IntStream.rangeClosed('0', '9'),
                IntStream.rangeClosed('A', 'Z')
        ).mapToObj(c -> (char) c+",").collect(Collectors.joining()).split(","));

1

简单是一种美德。使用此自然可读的数组:

char alphabet[] = {'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'};

0
char[] abc = new char[26];

for(int i = 0; i<26;i++) {
    abc[i] = (char)('a'+i);
}

内部演员是不必要的。
shmosel

0

使用Java 8流

  char [] alphabets = Stream.iterate('a' , x -> (char)(x + 1))
            .limit(26)
            .map(c -> c.toString())
            .reduce("", (u , v) -> u + v).toCharArray();

0

除小写字母外,要获取大写字母,还可以执行以下操作:

String alphabetWithUpper = "abcdefghijklmnopqrstuvwxyz" + "abcdefghijklmnopqrstuvwxyz".toUpperCase();
char[] letters = alphabetWithUpper.toCharArray();

-1

最终,您将获得一个char array字母。为什么您会如此艰苦地使用loop

只是

char[] alphabet=new char[]{'a','b',.........,'z'}

-1
import java.util.*;
public class Experiments{


List uptoChar(int i){
       char c='a'; 
        List list = new LinkedList();
         for(;;) {
           list.add(c);
       if(list.size()==i){
             break;
           }
       c++;
            }
        return list;
      } 

    public static void main (String [] args) {

        Experiments experiments = new Experiments();
          System.out.println(experiments.uptoChar(26));
    } 

1
这是故意进行混淆的尝试吗?for(;;)与外部计数器和break...并且没有检查i>='a'
绿巨人

-6
for (char letter = 'a'; letter <= 'z'; letter++)
{
    System.out.println(letter);
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.