我做了一个应该清理String的方法。它必须删除每个[a,z]字符。

但是我得到了这个例外:StringIndexOutOfBoundsException
当我插入超出条件范围的数字时,就会弹出此异常。
我无法发现自己​​做错了什么。

    public static String kuisStringOp(String str){
        StringBuilder strb = new StringBuilder(str);

        for (int i = 0; i < str.length(); i++) {
            if(strb.charAt(i)<'a'||strb.charAt(i)>'z'){

                strb.deleteCharAt(i);


            }

        }
        return strb.toString();
    }

最佳答案

您正在遍历原始字符串的整个长度,但是正在删除StringBuilder中的某些字符。删除字符后,您的StringBuilder会比原始的String短,并且内容已转移为覆盖已删除的字符。在到达原始StringBuilder的末尾之前,您最终将跑出String的末尾。

更改for循环条件以检查StringBuilder的长度,如果删除一个字符,则现在替换另一个字符。递减i再次检查:

for (int i = 0; i < strb.length(); i++) {
    if(strb.charAt(i)<'a'||strb.charAt(i)>'z'){
        strb.deleteCharAt(i);
        i--;
    }

}

09-11 20:28