我是一名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 :(得分:3)
for (int i = 0; i < totalLength-1; i++) {
//additional code..
if (cmpValStr.equals(myVal)) {
counter++;
}
}
你的'for'循环应该是这样的。由于增加了char2,请确保从String的长度中减去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);
答案 1 :(得分:0)
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
希望这有帮助。
答案 2 :(得分:0)
这是你的问题:
char2 = myStr.charAt(i + 1);
你在最后一个字符上超出界限。
尝试做:
for(int i = 0; i&lt; totalLength-1; i ++)