Ich versuche, ein Problem mit der Codierung von Fledermäusen zu lösen und kann keinen Test bestehen.StringIndexOutOfBoundsException -1 beim Überprüfen des letzten Buchstabens eines Wortes
Bei einer gegebenen Zeichenfolge zählen Sie die Anzahl der Wörter, die auf 'y' oder 'z' enden - also zählen das 'y' in "heavy" und das 'z' in "fez", aber nicht das "y" in "gelb" (nicht Groß-und Kleinschreibung). Wir sagen, dass ein y oder z am Ende eines Wortes steht, wenn nicht unmittelbar ein alphabetischer Buchstabe dahinter steht. (Hinweis: Character.isLetter (char) prüft, ob ein Zeichen ein alphabetisches Brief.)
Hier ist mein Code:
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;
}
Allerdings kann ich nicht diesen Test bestehen, und es zeigt diesen Fehler:
countYZ ("!! Tag - yaz !!") → 2
Exception:java.lang.StringIndexOutOfBoundsException: String index out of range: -1 (line number:6)
Offensichtlich ein der Strings in Ihrem Array ist leer. – Eran
@Eran ist korrekt. Eine einfache Lösung ist 'word.endsWith (" y ") || word.endsWith ("z") '. Dies funktioniert auch für leere Wortketten (ergibt wie erwartet den Wert false). –