用数组计算特殊字母

时间:2015-09-28 07:47:32

标签: java arrays string char

所以我有一个程序来计算字符串中每个字母的出现次数,为此我使用

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.我使用扫描仪读取输入。

2 个答案:

答案 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。它们提供了一个函数来计算给定子字符串(您的字符)在更大字符串中的匹配:

StringUtils.countMatches(...)