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

Replace multiple characters with multiple replacements in a String in Java?

我需要用字符串中的多个替换项来替换多个字符。我想替换以下字母:

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','I' 变为 'T',等等。 下面是一些示例代码:

public static void main(String[] args) {
    String s = "LAMA XZRQAOZ";
    // Replacing code
    // Output: s = "JAVA REPLACE"
}

最简单的方法是什么?

注意:我曾尝试使用数组和 for 循环,但它不止一次替换了字母,因此将其替换为错误的字母。

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

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

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

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


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

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

显然,这是行不通的,因为被替换的字符可能会受到下一轮替换的影响。

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


Note2: The String I'm actually trying to do is over 10000 characters long, so I don't know if iterating 1 character at a time will be too slow in performance.

不会的。事实上,它比多次调用替换要快几个数量级,因为替换调用还必须在幕后一次一个字符地遍历字符串。实际上,不可能 替换 String 中的单个字符而不遍历每个字符位置。