我做了一个应该清理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--;
}
}