在Java中的String中用多个替换替换多个字符?

时间:2015-03-22 02:46:29

标签: java replace

我需要在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个字符的性能是否会太慢。

1 个答案:

答案 0 :(得分:1)

最简单的方法是将String加载到StringBuilder中,然后遍历StringBuilder,一次测试并替换一个字符。在switch语句中或使用Map查找选择替换字符。

(A Map查找更简单/更少代码。switch语句应该更快。)

请参阅@Daniel Nugent关于示例解决方案的答案......


我怀疑你失败的尝试是这样的:

  for (replacement : ...) {
     str = str.replaceAll(...);
  }

显然,这不起作用,因为被替换的角色可能会进行下一轮替换。

事实上,使用任何现有的String.replace...方法实现这种替换形式是不切实际的。


  

注2:我实际上要做的字符串超过10000个字符,所以我不知道一次迭代1个字符的性能是否会太慢。

不会。事实上,它将比多次调用更快几个数量级,因为替换调用也必须在幕后一次迭代字符串一个字符。实际上,在String中替换单个字符是不可能 而不是单步执行每个字符位置。