2016-07-07 91 views
1

我無法刪除我的字符串中的所有大寫字符。任何見解都會被讚賞。無法刪除字符串中的所有高位字符

如果我輸入MANDY作爲str,我得到輸出爲AD。我不知道爲什麼它有這種行爲。

StringBuilder outString = new StringBuilder(str); 
for(int i = 0; i<outString.length(); i++){ 
    if(Character.isUpperCase(outString.charAt(i))){ 
     outString.deleteCharAt(i); 
    } 
} 
return outString.toString(); 

感謝

回答

8

通過刪除字符更改索引,所以接連每個大寫字符不會被刪除。

一個簡單的「訣竅」是以相反的方式迭代緩衝區(從最後開始)。這樣,您只會影響已處理字符的索引

for(int i = outString.length()-1; i>=0; i--){ 
    if(Character.isUpperCase(outString.charAt(i))){ 
     outString.deleteCharAt(i); 
    } 
} 
-1

您正在增加索引,同時從正在迭代的字符串中刪除項目。我將它稱爲併發修改的一個例子,儘管StringBuilder沒有給出任何異常。

更好的做到這一點:

int i = 0; 
    while (i < outString.length()) { 
     if (Character.isUpperCase(outString.charAt(i))) { 
      outString.deleteCharAt(i); 
     } else { 
      i++; 
     } 
    } 
4

可以使用regex做到這一點:

String s = "MANDYs"; 
s = s.replaceAll("[A-Z]", ""); 
System.out.println(s); 
-2

與此

aString.replaceAll("[A-Z]",""); 
嘗試
相關問題