Reputation: 33
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
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
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
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