2016-12-13 2 views
0

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)

+2

Offensichtlich ein der Strings in Ihrem Array ist leer. – Eran

+0

@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). –

Antwort

1

Exception:java.lang.StringIndexOutOfBoundsException: String index out of range: -1 (line number:6) bedeutet, dass Siesind telefonieren. Index.

Sie rufen immer charAt(word.length()-1) also wenn word.length()-1 == -1, word.length() == 0. Fügen Sie vor dem Überprüfen des letzten Buchstabens einen Haken bei word.length()>0 hinzu.

durch folgenden Slicing verursacht wird:

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

Zum Beispiel können Sie schreiben:

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

oder einfacher (nach Ole ‚s idea):

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