将Substring与Java中的字符串进行比较

时间:2012-09-06 22:06:12

标签: java if-statement comparison substring

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

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

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

3 个答案:

答案 0 :(得分:3)

当我接近s的末尾时,会发生outOfBounds异常,并且k会让你通过字符串的结尾。

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

或beginIndex大于endIndex。

在下面的行中,当循环从0运行到s.length时出现此问题 但它应该从0到s.length-t.length。

String newstring = s.substring(i,i+k);