加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 04:49:32 所属栏目:Java 来源:网络整理
导读:例: input = "10N10N";input = input.replaceAll("1|N","N|1"); // syntax not correct 预期产量:N01N01 我要问的是单行迭代器将所有“1”替换为“N”而所有“N”替换为“1”. 解决方法 由于Java 9 Matcher类包含 replaceAll?(FunctionMatchResult,String
例:

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

预期产量:N01N01

我要问的是单行迭代器将所有“1”替换为“N”而所有“N”替换为“1”.

解决方法

由于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#appendReplacement和Matcher#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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读