2016-07-07 16 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は例外を与えませんが、私はそれをConcurrent Modificationのケースと呼んでいます。

良いが、これを行うことです。

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]",""); 
で試してみてください
関連する問題