当前位置: 动力学知识库 > 问答 > 编程问答 >

if statement - 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

网友答案:

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.

网友答案:

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

网友答案:

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);
分享给朋友:
您可能感兴趣的文章:
随机阅读: