2016-05-26 29 views
1

私はsimillar質問が求められていることを知っているが、それらはすべて同じ問題を抱えていた:彼らはjava.lang.StringIndexOutOfBoundsException:範囲外の文字列インデックス:

i <= aString.lenth() 
のようなものを持っていたループの内側に

私は

を使用しました
i < phrase.length(); 

私はまだエラーが発生しています。私も試しました

i < phrase.length()-1; 

何が悪いですか?

ありがとうございました。 StringBuilder.setCharAt

replaced.setCharAt(currChar, ch); 

へのお電話で

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エラーがタイトルにあります - java.lang.StringIndexOutOfBoundsException:文字列インデックスが範囲外です: – Ekaterina1234

+0

どのラインでエラーが表示されますか?あなたの質問を編集し、スタックトレースの関連部分を含めてください。 –

+1

それは反復が起こるか? – Aimnox

答えて

6

最初の引数がi、ないcurrChar次のようになります。

replaced.setCharAt(i, ch); 

あなたがで文字を設定したいインデックスを渡す必要があります、文字自体ではありません

currCharint値は、例外を発生させ、あなたのStringBuilderの長さよりもおそらく高いですが、それがなかった場合、あなたはさらに悪くなる例外なしに奇妙な出力を得るでしょう。

+0

ありがとう、それは今や理にかなっています。 – Ekaterina1234

2

次のコードは、setCharAtメソッドAbstractStringBuilderクラスです。

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

あなたはsetCharAtメソッドに文字「」を渡している場合、それは暗黙のうちにインデックスでint型の値97までの文字からキャストされます。 をjava.lang.StringIndexOutOfBoundsExceptionとしました。ありがとう:)

関連する問題