3

所以基本上,用户输入 2 个字符串( CATSATONTHEMAT AT ),我们需要计算第二个字符串出现在第一个字符串中的次数(所以这里的答案是 3 )

这是我到目前为止所拥有的,它一直在说

“线程“主”java.lang.StringIndexOutOfBoundsException 中的异常:字符串索引超出范围:81223 at java.lang.String.substring(Unknown Source) 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
4

3 回答 3

3

当 i 接近 s 的末尾并且 k 带您通过字符串的末尾时,会发生 outOfBounds 异常。

您需要将循环更改为仅达到 s.length()-t.length()

for ( int i = 0 ; i < s.length()-t.length(); i++){

我还建议将 int k = t.length() 带出 for 循环。您不需要每次迭代都分配它,因为每次迭代都应该相同。

于 2012-09-06T22:08:24.303 回答
0

我认为您最好使用正则表达式。查看本教程以获取提示:http ://docs.oracle.com/javase/tutorial/essential/regex/matcher.html

于 2012-09-06T22:09:17.670 回答
0

如果 beginIndex 为负数或
endIndex 大于此 String 对象的长度,则会发生 IndexOutOfBoundsException,

或 beginIndex 大于 endIndex。

在下面的行中,这个问题发生在循环从 0 运行到 s.length 但它应该从 0 运行到 s.length-t.length。

String newstring = s.substring(i,i+k);
于 2012-09-07T00:40:03.220 回答