JAVA替换字符串而不多次替换它

时间:2011-04-17 13:09:59

标签: java arrays string replace char

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读取的字符串的代码(tIn - &gt; p),然后有一个Label Array(lChar),我存储每个唯一的char(char值是Array我在这里也有一个TextField数组(tReplace)我为lChar中的每个字符写了替换字符串(可以是多个字符)(来自'old'char的char值是Array索引)。

所以现在我想用tReplace中的每个字符替换lChar中的每个字符。如果我想将'1'替换为'2'而将'2'替换为'1',则字符串'12'我得到'11',因为在第一个循环中它将其更改为'22'并且在下一个循环中它将其更改为“11”。但我只想改变每一个字母,好像我会写

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

任何想法如何做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以为此任务创建自动机: 使用String.getChars()将String转换为char [],然后迭代数组,根据需要替换每个char。
注意:如果你需要用长度为> 1的字符串替换每个字符,你可以使用相同的方法,但是使用char [],使用StringBuilder,并为每个char:如果需要更换,将replacement-string附加到StringBuilder,否则:将char附加到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