java - 我想在 Java 中使用 String.replaceAll(regex, regex) 而不是 (regex, String)

标签 java string replace

例子:

input = "10N10N";
input = input.replaceAll("1|N", "N|1"); // syntax not correct

预期输出:N01N01

我要的是一个单行迭代器,它用“N”替换所有“1”,用“1”替换所有“N”。

最佳答案

因为 Java 9 Matcher 类包含 replaceAll​(Function<MatchResult,String> replacer) 您可以在其中根据当前匹配动态指定应该用作替换的内容。所以你的代码可能看起来像:

Map<String, String> replacementsMap = Map.ofEntries(
        Map.entry("1", "N"),
        Map.entry("N", "1")
);

String input = "10N10N";
Pattern p = Pattern.compile("1|N");
Matcher m = p.matcher(input);
String replaced = m.replaceAll(match -> replacementsMap.get(match.group()));
System.out.println(replaced);

输出:N01N01 .


在 Java 9 之前的版本中,您可以使用 Matcher#appendReplacementMatcher#appendTail而不是 replaceAll喜欢

//create Pattern p, Matcher m and replacement map
StringBuffer sb = new StringBuffer();
while(m.find()){
    m.appendReplacement(sb, replacementsMap.get(m.group()));
}
m.appendTail(sb);
String replaced = sb.toString();

如果您愿意使用外部库,那么 Apache Commons - Lang使用 replaceEach(String text, String[] searchList, String[] replacementList) 包含 StringUtils 类方法。您可以像这样使用它:

String input = "10N10N";
String replaced = StringUtils.replaceEach(input, new String[] {"1","N"}, new String[] {"N","1"});
System.out.println(replaced);//N01N01

关于java - 我想在 Java 中使用 String.replaceAll(regex, regex) 而不是 (regex, String),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48600037/

相关文章:

java - 如何在基于 Spring MVC 的 Web 应用程序中创建撤消功能?

c# - 如何从数组中选择一个随机字符串并将其显示在文本框中?

javascript - 在javascript中使用正则表达式将每个前导和尾随空格替换为下划线

python - 替换python中单词之间的单个空格

java - google-http-java-client json 更新现有对象

java - 无法在 JOOQ 中设置引用麦粒肿 (RenderNameStyle.QUOTED)

java - 在 Java 中检索 MySQL 自动增量

c++ - 为什么第二个字符丢失了第二个变量

C++:从 C++11 中的内存效率角度来看,返回字符串是否可行?

python - 将列表中的每个项目的空格替换为破折号-python