java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:

Eka*_*234 1 java

我知道simillar问题已被问到,但它们都有同样的问题:在循环内部它们有类似的东西

i <= aString.lenth()
Run Code Online (Sandbox Code Playgroud)

我用了

i < phrase.length();
Run Code Online (Sandbox Code Playgroud)

我仍然得到错误.我也试过了

i < phrase.length()-1;
Run Code Online (Sandbox Code Playgroud)

有什么想法有什么不对?

谢谢.

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", '*'));

    }    
}
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 6

在你的电话里 StringBuilder.setCharAt

replaced.setCharAt(currChar, ch);
Run Code Online (Sandbox Code Playgroud)

第一个参数应该是i,而不是currChar:

replaced.setCharAt(i, ch);
Run Code Online (Sandbox Code Playgroud)

您应该传递要设置char 的索引,而不是字符本身.

currChar它的int值可能高于你的长度StringBuilder,这导致异常,但如果不是,你会得到奇怪的输出而没有例外,这更糟糕.