2012-10-15 254 views
1

我在替換字符串中的字符時遇到了一些麻煩。代碼對於刪除連字符的時間段非常合適,但對於字母'e',它會刪除「test」中的'e',並且它還會在字符串的末尾轉換三個'e'。有誰知道爲什麼會發生這種情況?Java - 字符串中的字符替換

 String str = "This is a test string, 12345! -12e3.0 eee"; 
    for(int i = 0; i < str.length(); i++) { 
     if((str.charAt(i) == '-') && (Character.isDigit(str.charAt(i+1)))) { 
      str = str.replace(str.charAt(i), '*'); 
     } 

     if((str.charAt(i) == 'e') && (Character.isDigit(str.charAt(i+1)))) { 
      str = str.replace(str.charAt(i), '*'); 
     } 

     if((str.charAt(i) == '.') && (Character.isDigit(str.charAt(i+1)))) { 
      str = str.replace(str.charAt(i), '*'); 
     } 
    } 
    str = str.replaceAll("[1234567890]", "*"); 
    System.out.println(str); 
+0

也許你應該在for循環的末尾寫出來str'的​​'內容。然後你可以看到什麼時候發生。 –

+2

這聽起來像是你應該期待的:它用'*'代替所有'e'。 –

+2

無關如果我是最後一個字符,並且您嘗試評估str.charAt(i + 1) – JustinKSU

回答

3

在每種情況下,if部分剛發現的字符是否應該更換......但隨後替換本身:

str = str.replace(str.charAt(i), '*') 

...執行整個的該更換字符串

對此的簡單的解決辦法可能是將其轉換爲字符數組下手,一次更換一個字符,然後創建其餘的字符串:

char[] chars = str.toCharArray(); 
for (int i = 0; i < chars.length - 1; i++) { 
    if (chars[i] == '-' && Character.isDigit(chars[i + 1])) { 
     chars[i] = '*'; 
    } 
    // Similarly for the other two 
} 
String newString = new String(chars); 

還是免了重複數據刪除,替換爲中間部分:

for (int i = 0; i < chars.length - 1; i++) { 
    if (Character.isDigit(chars[i + 1]) && 
     (chars[i] == '-' || chars[i] == 'e' || chars[i] == '.')) { 
     chars[i] = '*'; 
    } 
}