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");
任何想法如何做到这一点?
答案 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