【问题标题】:Counting special letters with array用数组计算特殊字母
【发布时间】:2015-09-28 07:47:31
【问题描述】:

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

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

【问题讨论】:

  • 只需为每个字符添加条件。没有比这更简单的解决方案了。或者使用Map 来进一步扩展

标签: java arrays string char


【解决方案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]]++;

【讨论】:

  • 嗯,这是我最初的解决方案,但不是很流畅,有没有办法让它更无缝,有什么办法可以暂时改变某些字符的值?
  • 你可以做一个数组,看起来像这样: 97 => 0 98 => 1 ... 230 => 26 ... 248 => 27 ... 229 => 29 并且然后就做 charAmount[array[value]]++;
  • @Alexel,你为什么不更新你在评论中所做的回答?答案太正常了。但是评论中的答案是可爱而精彩的。
  • 实际上我有一个“额外问题”:当我尝试输入“æææ”之类的字符串时,“æ”的值突然变为8216。我使用扫描仪读取输入。
  • 你能打印你拥有的字符而不是值吗?请尝试打印标志并给我们结果!
【解决方案2】:

如果可以使用外部库,我宁愿尝试使用 Apache commons。它们提供了一个函数来计算更大字符串中给定子字符串(您的字符)的匹配:

StringUtils.countMatches(...)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多