2011-04-17 44 views
0
String _p = p;  
for(int i = 0; i <= _p.length()-1; i++) 
    _p = _p.replace(lChar[_p.charAt(i)].getText(), tReplace[_p.charAt(i)].getText()); 
tOut.append(_p); 

以上是我使用,以取代我一個TextArea的讀出的字符串的代碼(錫 - > P),然後有一個標籤陣列(lChar)其中,I存儲每一個唯一的字符(char值是數組索引),我也有一個TextField數組(tReplace),我在這裏爲lChar中的每個字符寫入替換字符串(可以是多個字符) char是數組索引)。JAVA替換字符串而不更換很多次

所以現在我想用tReplace中的每個字符替換lChar中的每個字符。如果我想用'2'替換字符'12'的'2'和'2',我得到'11',因爲在第一個循環中它將它改變爲'22'並且在下一個循環中它將其更改爲「11」。但我只想改變每個字母一次,好像我會寫

String.valueOf(21).replace("2","1").replace("1","2"); 

任何想法如何做到這一點?

回答

1

您可以創建承擔這一任務的自動機:
投你的字符串中使用String.getChars()到char [],然後迭代這個數組,根據需要替換每個字符。
注意:如果您需要用長度大於1的字符串替換每個字符,您可以使用相同的方法,但使用char [],使用StringBuilder,並且對於每個char:如果需要被替換,替換字符串追加到StringBuilder,否則:炭追加到StringBuilder
示例代碼:

String original = "1212"; 
     HashMap<Character, String> map = new HashMap<Character, String>(); 
     map.put('1', "22"); 
     map.put('2', "1"); 
     StringBuilder sb = new StringBuilder(); 
     for (int i =0;i<original.length();i++) { 
      char ch = original.charAt(i); 
      if (map.containsKey(ch)) { 
       sb.append(map.get(ch)); 
      } else { 
       sb.append(ch); 
      } 
     } 
     System.out.println(sb); 

將導致:221221

+0

非常感謝你! – paul 2011-04-17 13:45:14