所以我有一个程序来计算字符串中每个字母的出现次数,为此我使用
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)&amp; 'å'(229)。如何将这三个字母“分配”到26,27&amp;不使用if测试或开关的charAmount数组的第29个索引?
编辑:上面提到的代码不是整个块,我也有一个关于相关字母的开关,但我正在寻找更好的解决方案。奖励问题:当我尝试输入像“æææ”之类的字符串时,'æ'的值突然变为8216.我使用扫描仪读取输入。
答案 0 :(得分:1)
在if:
之后尝试此操作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
然后在你的if:
中执行此操作charAmount[spChars_to_Chars[value]]++;
答案 1 :(得分:0)
如果你可以使用外部库,我宁愿尝试使用Apache commons。它们提供了一个函数来计算给定子字符串(您的字符)在更大字符串中的匹配: