2012-09-06 5 views
3

поэтому в основном, а пользователь вводит 2 строки (CATSATONTHEMAT AT) и нам нужно подсчитать, сколько раз появляется вторая строка в первой строке (так что ответ здесь 3)Сравнивая подстроки в строку в Java

это то, что я до сих пор, и он продолжает говорить

«исключение в потоке„основной“java.lang.StringIndexOutOfBoundsException: индекс строки из диапазона: 81223 на java.lang.String.substring (Unknown Source) на практике.main (практика.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

Похож на типичный вопрос для интервью! Считаете ли вы использование 'String.indexOf (String str, int fromIndex)'? В реальном мире вы просто используете StringUtils.countMatches() из [commons-lang] (http://commons.apache.org/lang/api-2.4/org/apache/commons/lang/StringUtils.html)! –

ответ

3

Исключение outOfBounds происходит, когда я рядом с концом с и к принимает вы сдали конец строки.

Вам нужно изменить цикл, чтобы идти только до s.length() - t.length()

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

Я также рекомендовал бы приведение Int к = t.length() из ряда для цикла. Вам не нужно назначать эту итерацию так, как она должна быть одинаковой для каждой итерации.

+0

спасибо! Я не принимал во внимание, что подстрока выйдет за пределы цикла! Я заменил границы и добавил +1, поскольку s.length() - t.length() выведет 2 пробела, и мне все еще нужно проверить, могут ли эти 2 быть частью второй строки. Я попробовал это с разными примерами, и, похоже, все работает нормально. Еще раз спасибо! – user1653266

0

IndexOutOfBoundsException происходит если beginIndex отрицательный, или
ENDINDEX больше, чем длина этой строки объекта,

или beginIndex больше ENDINDEX.

В строке ниже эта проблема возникает, когда цикл работает от 0 до s.length , но он должен работать от 0 до s.length-t.length.

String newstring = s.substring(i,i+k); 
Смежные вопросы