所以基本上,用户输入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
答案 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);