我需要在String中用多个替换替换多个字符。我想替换以下字母:
Z,I,K,A,Y,W,X,F,S,Q,V,G,N,O,H,J,B,P,T,R,M,E,L,C ,U,D
与对应的:
E,T,O,A,I,N,R,S,H,L,D,F,M,C,U,G,W,Y,B,P,V,K,J,Q ,Z,X
例如,'Z'变为'E','我'变为'T'等。 这是一些示例代码:
public static void main(String[] args) {
String s = "LAMA XZRQAOZ";
// Replacing code
// Output: s = "JAVA REPLACE"
}
最简单的方法是什么?
注意:我尝试过使用一个数组和一个for循环,但是它会多次替换掉这个字母,所以它会把它替换成错误的字母。
注2:我实际上要做的字符串超过10000个字符,所以我不知道一次迭代1个字符的性能是否会太慢。
答案 0 :(得分:1)
最简单的方法是将String
加载到StringBuilder
中,然后遍历StringBuilder
,一次测试并替换一个字符。在switch
语句中或使用Map
查找选择替换字符。
(A Map
查找更简单/更少代码。switch
语句应该更快。)
请参阅@Daniel Nugent关于示例解决方案的答案......
我怀疑你失败的尝试是这样的:
for (replacement : ...) {
str = str.replaceAll(...);
}
显然,这不起作用,因为被替换的角色可能会进行下一轮替换。
事实上,使用任何现有的String.replace...
方法实现这种替换形式是不切实际的。
注2:我实际上要做的字符串超过10000个字符,所以我不知道一次迭代1个字符的性能是否会太慢。
不会。事实上,它将比多次调用更快几个数量级,因为替换调用也必须在幕后一次迭代字符串一个字符。实际上,在String
中替换单个字符是不可能 而不是单步执行每个字符位置。