【问题标题】:Java Exception in Counting number of occurrences of character in a string计算字符串中字符出现次数的Java异常
【发布时间】:2013-08-20 17:21:47
【问题描述】:

我是一个java初学者,想做一些逻辑的东西。我从一个简单的程序开始(即)来查找字符串中字符的出现总数。但我最终得到了这个例外

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 52
    at java.lang.String.charAt(Unknown Source)

我使用了以下代码

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String myStr = "sofdaasdasdaofsdwerwtytuoftyutyusdfsdfsdcsadaswdeasd";
        // Counting number of occurences of 'of' in myStr
        int counter = 0;
        int totalLength = myStr.length();
        char char1;
        char char2;
        // To find of
        String myVal = "of";
        String cmpVal1;
        String cmpVal2;
        String cmpValStr;
        for (int i = 0; i < totalLength; i++) {
            char1 = myStr.charAt(i);
            cmpVal1 = Character.toString(char1);
            char2 = myStr.charAt(i + 1);
            cmpVal2 = Character.toString(char2);
            cmpValStr = cmpVal1 + cmpVal2;
            if (cmpValStr == myVal) {
                counter++;
            }

        }
        System.out.print(counter);
    }

}

【问题讨论】:

  • 我相信罪魁祸首是char2 = myStr.charAt(i + 1);,比较字符串使用String.equals()
  • 我不明白,您要搜索哪个角色?或者,您是否在字符串“sofdaasdasdaofsdwerwtytuoftyutyusdfsdfsdcsadaswdeasd”中搜索字符串“of”?
  • 对不起。这是我的错误,我在这里发布我的问题之前没有正确浏览我的代码。现在我明白了,谢谢大家。

标签: java string exception character


【解决方案1】:
for (int i = 0; i < totalLength-1; i++) {
    //additional code..
    if (cmpValStr.equals(myVal)) {
        counter++;
    }
}

你的“for”循环应该是这样的。由于 char2 的增加,请确保从字符串的长度中减去 1。

另外,比较两个字符串时使用 .equals()

不过,如果您有兴趣,我会这样做:

String myStr = "sofdaasdasdaofsdwerwtytuoftyutyusdfsdfsdcsadaswdeasd";
int counter=0;
for(int i=0;i<myStr.length()-1;i++){
    if(myStr.subSequence(i, i+2).toString().contains("of"))
    {
        counter++;
    }
}
System.out.print(counter);

【讨论】:

    【解决方案2】:

    这是你的问题:

    char2 = myStr.charAt(i + 1);
    

    你在最后一个字符上超出了这个范围。

    尝试做:

    for (int i = 0; i

    【讨论】:

      【解决方案3】:

      i+1;这就是问题所在。

       char2 = myStr.charAt(i + 1);
      
       cmpValStr = cmpVal1 + cmpVal2;  // use equals for String.
      
       for (int i = 0; i < totalLength - 1; i++) // Not i< totalLength
      

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2011-06-14
        • 2014-04-24
        • 2020-02-21
        • 2012-02-12
        • 2023-02-04
        • 2020-05-06
        相关资源
        最近更新 更多