2013-08-20 262 views
-2

我是一名java初学者,想做一些逻辑工作。我已经开始使用一个简单的程序(即)来查找字符串中字符出现的总次数。但是,我结束了与此异常计算字符串中字符出现次数的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); 
    } 

} 
+0

我认为罪魁祸首是'char2 = myStr.charAt(i + 1);'并且比较字符串use ['String.equals()'](http://docs.oracle.com/javase/7/docs/api/java/lang/ String.html#equals(java.lang.Object)) – Smit

+0

我不明白,你在搜索哪个字符?或者,你是否在字符串“sofdaasdasdaofsdwerwtytuoftyutyusdfsdfsdcsadaswdeasd”中搜索字符串“of”? – ThePerson

+0

对不起。这是我的错误,我没有正确地通过我的代码之前发布我的问题在这里。现在我明白了,谢谢大家。 – raduns

回答

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); 
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 

希望这有助于。

0

这是你的问题:

char2 = myStr.charAt(i + 1); 

你去出界与此有关的最后一个字符。

尝试这样做:

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

相关问题