因此,我有一个程序可以计算字符串中每个字母的出现次数,为此,我使用了
int[] charAmount = new int[30];
for(int i = 0; i<text.length(); i++){
char sign = text.charAt(i);
int value = sign;
if(value >= 97 && value <= 122){
charAmount[value-97]++; // 97 = 'a'
}
这很好用,但我还需要覆盖字母“æ”(230),“ø”(248)和“å”(229)。如何不使用if测试或开关就将这三个字母“分配”给charAmount数组的26、27和29索引?
编辑:上面介绍的代码不是整个块,我还为有问题的字母提供了一个开关,但我正在寻找更好的解决方案。
奖金问题:当我尝试输入“æææ”之类的字符串时,“æ”的值突然变为8216。我使用扫描仪读取输入。
最佳答案
在以下情况下尝试以下操作:
else if (value == 230)
charAmount[26]++;
else if (value == 248)
charAmount[27]++;
else if (value == 229)
charAmount[29]++;
您还可以对字符及其关联进行数组处理,该数组如下所示:
spChars_to_Chars =
0 => 96
1 => 97
...
229 => 29
230 => 26
...
248 => 27
然后在以下情况下执行此操作:
charAmount[spChars_to_Chars[value]]++;