//值数组的格式为 { "var1", "val1", "var2", "val2",.. }
public static String replaceMethod(String template, String... values) {
String p = template;
for (int i = 0; i < values.length; i += 2) {
p = p.replace(values[i], values[i+1]);
}
return populatedTemplate;
}
此方法将一组子字符串替换为字符串中的相应值。 例如:- 字符串 => abcd 值的子字符串数组 ["a","b","c","d"] 这意味着将 'a' 替换为 'b',将 'b' 替换为 'c'。
那么,现在问题来了。
1.我的上述实现在第一个循环中将 'a' 替换为 'b' ,然后在第二个循环中,将 'b' 替换为 'c' ,使最终字符串为“cccd”。但我希望输出为“bccd”。系列替换使用先前替换的字符串来进一步工作。 有没有一种方法可以更有效地并行替换所有子字符串。
2.如何使用Map而不是数组(上述方法的第二个参数)来实现上述方法? Map 更好,还是上面的实现更好?
最佳答案
您最好使用映射并迭代模板
中的每个字符。这样您就可以避免在同一索引位置进行多次替换。
String template = "abcd";
StringBuilder populatedTemplate = new StringBuilder();
HashMap<Character, Character> map = new HashMap<>();
map.put('a', 'b');
map.put('b', 'c');
for (int i = 0; i < template.length(); i++) {
populatedTemplate.append(
map.getOrDefault(template.charAt(i), template.charAt(i)));
}
System.out.println(populatedTemplate);
与 OP 发布的解决方案相比,此解决方案的一些专业论点。
- 避免在同一索引位置进行多次替换,第一步将
a
替换为b
,第二步将b
替换为c
这会导致a
意外有效地替换为c
- 仅在
模板上迭代一次
- 不要为每个替换对创建一个新的
String
对象,因为它本来就是这里的p = p.replace(values[i], values[i+1]) ;
关于java - 独立(并行)替换字符串中的一组子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37187433/