2011-04-17 68 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