user1653266
user1653266

Reputation: 33

Comparing a Substring to a string in Java

so basically, a user inputs 2 strings ( CATSATONTHEMAT AT ) and we need to count how many time the second string appears in the first string ( so the answer here is 3 )

this is what I have so far, and it keeps saying

"Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 81223 at java.lang.String.substring(Unknown Source) at practice.main(practice.java:60)"

any help would be appreciated! I just can't see to find where I went wrong

    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

Upvotes: 3

Views: 5734

Answers (3)

Abhishekkumar
Abhishekkumar

Reputation: 1102

IndexOutOfBoundsException occurs if the beginIndex is negative, or
endIndex is larger than the length of this String object,

or beginIndex is larger than endIndex.

In the line below this problem occurs as loop is running from 0 to s.length but it should run from 0 to s.length-t.length.

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

Upvotes: 0

JTMon
JTMon

Reputation: 3199

I think you would be better off using regular expressions. Take a look at this tutorial for hints: http://docs.oracle.com/javase/tutorial/essential/regex/matcher.html

Upvotes: 0

alanmanderson
alanmanderson

Reputation: 8200

The outOfBounds exception happens when i is near the end of s and k takes you passed the end of the string.

You need to change the loop to only go up to s.length()-t.length()

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

I would also recommend bringing the int k = t.length() out of the for loop. You don't need to assign that every iteration as it should be the same for every iteration.

Upvotes: 3

Related Questions