【问题标题】:Replace multiple characters with multiple replacements in a String in Java?用Java中的String中的多个替换替换多个字符?
【发布时间】:2015-03-22 02:46:29
【问题描述】:

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

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个字符是否会导致性能太慢。

【问题讨论】:

  • 使用HashMap
  • 旁白:这看起来像一个简单的替换密码。您应该知道,这样的密码很容易破解。我可以用铅笔和纸在 20 分钟内完成 :-)
  • @StephenC 是的,我正在尝试破解替换密文。我知道如何手工完成,但我想为它编写一个程序。

标签: java replace


【解决方案1】:

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

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

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


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

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

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

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


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

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

【讨论】:

  • 在所有方面都同意,很好的答案。为每个字符调用replace()replaceAll() 并不是一个好的解决方案。
猜你喜欢
  • 2017-09-28
  • 1970-01-01
  • 2017-02-24
  • 2012-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多