3

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
1
  • Looks like a typical interview question! Have you considered using String.indexOf(String str, int fromIndex)? In the real world you'd just use StringUtils.countMatches() from commons-lang! Commented Sep 6, 2012 at 22:12

3 Answers 3

3

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.

Sign up to request clarification or add additional context in comments.

1 Comment

thank you! I did not take into account that substring would go beyond the loop! I replaced the boundaries and added a +1 since s.length()-t.length() would take out 2 spaces and I still need to check if those 2 could be part of the second string. I tried it with different examples and it seems to work just fine. again thank you!
0

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

Comments

0

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);

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.