2016-05-26 14 views
1

Ich weiß, dass simillar Fragen gestellt wurden, aber sie alle das gleiche Problem hatte: Innenseite der Schleife hatte sie so etwas wiejava.lang.StringIndexOutOfBoundsException: String-Index außerhalb des Bereichs:

i <= aString.lenth() 

I verwendet

i < phrase.length(); 

und ich bekomme immer noch den Fehler. Ich versuchte auch

i < phrase.length()-1; 

Irgendwelche Ideen, was falsch ist?

Danke.

public class WordPlay { 
    public boolean isVowel(char c) { 
     if(c=='a' || c=='A' || c=='e' || c=='E' || c=='i' || c=='I' || c=='o' || c=='O' ||  c=='u' || c=='U') {  
      return true; 
     }  
     else 
     { 
      return false; 
     }  
    } 
    public void testIsVowel() { 
     System.out.println(isVowel('F')); 
    } 
    public String replaceVowels (String phrase, char ch){ 
     StringBuilder replaced = new StringBuilder(phrase); 
     for (int i = 0; i<phrase.length(); i++) { 
      char currChar = phrase.charAt(i); 
      if (isVowel(currChar)){ 

        //the line below causes the error 
        replaced.setCharAt(currChar, ch); 
      }  
     }  
     return replaced.toString();  
    } 
    public void testReplaceVowels() { 
     System.out.println(replaceVowels("Hello World", '*')); 

    }  
} 
+0

@JohnSmith der Fehler ist im Titel - java.lang.StringIndexOutOfBoundsException: String-Index außerhalb des Bereichs: – Ekaterina1234

+0

Welche Zeile gibt Ihnen den Fehler? Bitte bearbeiten Sie Ihre Frage und fügen Sie den relevanten Teil der Stack-Trace ein. –

+1

Bei welcher Iteration passiert es? – Aimnox

Antwort

6

In Ihrem Aufruf zum StringBuilder.setCharAt

replaced.setCharAt(currChar, ch); 

das erste Argument i sein sollte, nicht currChar:

replaced.setCharAt(i, ch); 

sollten Sie passieren den Index Sie die Zeichen ein, bei , nicht das Zeichen selbst.

currChar ‚s int Wert ist wahrscheinlich höher als die Länge Ihrer StringBuilder, die die Ausnahme verursacht, aber wenn es nicht ist, würden Sie merkwürdige Ausgabe ohne Ausnahme erhalten, was noch schlimmer ist.

+0

Vielen Dank, es macht jetzt Sinn. – Ekaterina1234

2

Der folgende Code ist die setCharAt Methode von AbstractStringBuilder Klasse.

public void setCharAt(int index, char ch) { 
    if ((index < 0) || (index >= count)) 
     throw new StringIndexOutOfBoundsException(index); 
    value[index] = ch; 
} 

Wenn Sie vorbei Charakter 'a' zu setCharAt Methode, wird es implizit von Zeichen zu int-Wert 97 bei Index gegossen werden. Es wurde gemacht java.lang.StringIndexOutOfBoundsException. Danke :)

Verwandte Themen