所以基本上我搞砸了。
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;
}
我在做霍夫曼树的事。
答案 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)。要将字符串转换为字符数组,可以使用getChars
或chars
。参见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班轮做到这一点。但这只是根据给定的源文本来填充地图。您可以进入并删除换行符。