[英]StringIndexOutOfBoundsException
我做了一個應該清理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
短,並且內容已轉移為覆蓋已刪除的字符。 在到達原始String
的末尾之前,您最終將在StringBuilder
的末尾運行。
更改for
循環條件以檢查StringBuilder
的長度,如果刪除一個字符,則現在替換另一個字符。 遞減i
再次檢查:
for (int i = 0; i < strb.length(); i++) {
if(strb.charAt(i)<'a'||strb.charAt(i)>'z'){
strb.deleteCharAt(i);
i--;
}
}
如果要遍歷str
但從strb
刪除,則需要
保留兩個索引/指針,一個指向str
,一個指向strb
。
嘗試這個。
public class Test015 {
public static void main(String a[]) throws Exception {
String z = "111aaaa2222bbb";
System.out.println(kuisStringOp(z));
}
public static String kuisStringOp(String str){
StringBuilder strb = new StringBuilder(str);
int i = 0;
int j = 0;
for (i = 0; i < str.length(); i++) {
if(strb.charAt(j)<'a'||strb.charAt(j)>'z'){
strb.deleteCharAt(j);
}else{
j++;
}
}
return strb.toString();
}
}
采用
for (int i = 0; i < strb.length(); i++) {
至於刪除緩沖區中的字符,則需要在下一次迭代之前檢查其長度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.