在Java中将子字符串与字符串进行比较

在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)” 任何帮助都将不胜感激!我只是看不出我错在哪里

因此,基本上,用户输入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);