在 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
中的单个字符而不遍历每个字符位置。
我需要用字符串中的多个替换项来替换多个字符。我想替换以下字母:
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
中的单个字符而不遍历每个字符位置。