如何将所有ASCII值放入数组中?

时间:2019-10-21 20:22:22

标签: java

所以基本上我搞砸了。

private static char admittedLetters[] = {'L', 'K', 'M', 'C', 'U', 'Z', 'E', 'D'};

我的整个程序都基于该数组。 我需要的是一个数组,其中所有256个字符都包含在内,你们知​​道这样做的任何方式吗?

编辑:我需要全部256个ascii字符才能工作:

 private Hashtable<Character, Integer> createFT() {

    int lettersRepetition[] = new int[admittedLetters.length];

    for (char character : text.toCharArray()) {
        for (int i = 0; i < admittedLetters.length; i++) {
            if (character == admittedLetters[i]) {
                lettersRepetition[i] = lettersRepetition[i] + 1;
            }
        }
    }

    Hashtable<Character, Integer> frequencyTable = new Hashtable<>();
    int cont = 0;
    for (char letter : admittedLetters) {
        frequencyTable.put(letter, lettersRepetition[cont]);
        cont++;
    }

    return frequencyTable;
}

我在做霍夫曼树的事。

2 个答案:

答案 0 :(得分:0)

只有128个ASCII字符。参见Wikipedia。您可能已经说过ISO / IEC 8859-1,在Java中称为ISO_8859_1。无论如何,解决方案如下:创建一个字节数组,其ASCII值从0到127,对于ISO-8859-1则为255,然后将其转换为字符串:String str = new String(byteArray, StandardCharsets.US_ASCII);(或分别为ISO_8859_1)。要将字符串转换为字符数组,可以使用getCharschars。参见the Javadoc for String

答案 1 :(得分:0)

而不是生成字符列表然后进行计数。只需阅读文本并映射文本中的所有字符即可。

 String  sourceText = "a whole bunch of characters and things like that";
    Map<Integer,Long> charCount = sourceText.chars().boxed().collect(Collectors.groupingBy(i->i,Collectors.counting()));
    charCount.forEach((k,v)->{
        char c = (char)k.intValue();
        System.out.println("the count for character `"+c+"` is:"+v);
    });

不幸的是,从我看过的Java来看,Java不喜欢对Integer进行Character,但对char和back primative的处理却是int的。也失去了一些类型信息,所以我不能在1班轮做到这一点。但这只是根据给定的源文本来填充地图。您可以进入并删除换行符。