在Java中将子字符串与字符串进行比较
因此,基本上,用户输入2个字符串(catsatonhemat AT),我们需要计算第二个字符串在第一个字符串中出现的时间(这里的答案是3) 这就是我到目前为止一直在说的 线程“main”java.lang.StringIndexOutOfBoundsException中的“异常”:字符串索引超出范围:81223 位于java.lang.String.substring(未知源) at practice.main(practice.java:60)” 任何帮助都将不胜感激!我只是看不出我错在哪里在Java中将子字符串与字符串进行比较,java,if-statement,comparison,substring,Java,If Statement,Comparison,Substring,因此,基本上,用户输入2个字符串(catsatonhemat AT),我们需要计算第二个字符串在第一个字符串中出现的时间(这里的答案是3) 这就是我到目前为止一直在说的 线程“main”java.lang.StringIndexOutOfBoundsException中的“异常”:字符串索引超出范围:81223 位于java.lang.String.substring(未知源) at practice.main(practice.java:60)” 任何帮助都将不胜感激!我只是看不出我错在哪里
String s = scan.next(); // CATSATONTHEMAT
String t = scan.next(); // AT
int j= 0;
for ( int i = 0 ; i < s.length(); i++){
int k = t.length();
String newstring = s.substring(i,i+k); // I printed this and the substring works so the if statement might not be working..
if(newstring.equals(t))
j++; // if the new substring equal "AT" then add 1
}
System.out.printf("%d", j); // suppose to print just 3
String s=scan.next();//Catsatonhemat
字符串t=scan.next();//在
int j=0;
对于(int i=0;i
当i接近s的结尾时,会发生outOfBounds异常,k表示您通过了字符串的结尾
您需要将循环更改为仅向上到s.length()-t.length()
for(int i=0;i
我还建议将int k=t.length()从for循环中带出来。您不需要指定每个迭代,因为每个迭代都应该相同。我认为您最好使用正则表达式。请参阅本教程以获得提示:IndexOutOfBoundsException发生 如果beginIndex为负值,或
endIndex大于此字符串对象的长度 或者beginIndex大于endIndex 在下面的行中,当循环从0运行到s.length时,会出现此问题 但是它应该从0到s.length-t.length
String newstring = s.substring(i,i+k);
看起来像是一个典型的面试问题!你有没有考虑过使用
String.indexOf(String str,int fromIndex)
?在现实世界中,你只需要使用StringUtils.countMatches()from!谢谢!我没有考虑到子字符串会超出循环!我替换了边界,并添加了一个+1,因为s.length()-t.length()将去掉2个空格,我仍然需要检查这2个空格是否是第二个字符串的一部分。我用不同的示例进行了尝试,似乎效果很好。再次感谢!
String newstring = s.substring(i,i+k);