2016-12-13 8 views
0

Я пытаюсь решить проблему с кодировкой bat и не могу пройти один тест.StringIndexOutOfBoundsException -1 при проверке последней буквы слова

С учетом строки подсчитайте количество слов, оканчивающихся на 'y' или 'z' - так что «y» в «тяжелом» и «z» в «fez» рассчитывается, но не «y», в «желтом» (не чувствительный к регистру). Мы скажем, что y или z находятся в конце слова, если после него не будет буквы алфавита. (Примечание: Character.isLetter (голец) тесты, если символ представляет собой алфавитное письмо.)

Вот мой код:

public int countYZ(String str) { 
int count = 0; 
str = str.toLowerCase(); 
String[] newArr = str.split("[\\s:0-9-!]+"); 
for (String word : newArr) { 
    if (word.charAt(word.length() - 1) == 'y' || 
    word.charAt(word.length() - 1) == 'z') { 
    count++; 
    } 
    } 
    return count; 
} 

Однако я не могу пройти этот тест и показывает эту ошибку:

countYZ ("!! день - Язев !!") → 2

Exception:java.lang.StringIndexOutOfBoundsException: String index out of range: -1 (line number:6)

+2

Очевидно один Строки в вашем массиве пустые. – Eran

+0

@Eran - это правильно. Легкое исправление использует 'word.endsWith (" y ") || word.endsWith ("г") '. Это также работает для пустых строк слов (дает false, как ожидалось). –

ответ

1

Exception:java.lang.StringIndexOutOfBoundsException: String index out of range: -1 (line number:6) означает, что вы звоните -1-й индекс.

Вы всегда звоните charAt(word.length()-1), так что если word.length()-1 == -1, word.length() == 0. Добавьте проверку, если word.length()>0 перед проверкой последней буквы.

Это вызвано следующим нарезка:

!!day--yaz!! 
["day", "yaz", ""] 

Например, вы можете написать:

for (String word : newArr) { 
    if (word.length() > 0 && (word.charAt(word.length() - 1) == 'y' || 
    word.charAt(word.length() - 1) == 'z')) { 
    count++; 
    } 
    } 
    return count; 
} 

или проще (по Ole «s идеи):

for (String word : newArr) { 
    if (word.endsWith("y") || word.endsWith("z")) { 
    count++; 
    } 
    } 
    return count; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^