-2

我是一个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);
    }

}
4

3 回答 3

3
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);
于 2013-08-20T17:29:49.733 回答
0

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

 char2 = myStr.charAt(i + 1);

 cmpValStr = cmpVal1 + cmpVal2;  // use equals for String.

 for (int i = 0; i < totalLength - 1; i++) // Not i< totalLength

希望这可以帮助。

于 2013-08-20T17:23:42.690 回答
0

这是你的问题:

char2 = myStr.charAt(i + 1);

你在最后一个字符上越界了。

尝试做:

for (int i = 0; i < totalLength-1; i++)

于 2013-08-20T17:25:10.700 回答