You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何用String.replaceAll(regex, regex)实现单行双向字符替换

实现Java中字符的双向互换(1↔N)

要解决这个双向替换的问题,直接连续调用两次replaceAll会踩坑——比如先把1换成N,再把N换成1时,刚替换出来的N也会被改成1,最终结果全变成1,完全不符合预期。

这里给你两种简洁的实现方式,都能一行代码搞定需求:

方法1:临时占位符过渡(简单直观)

用一个原始字符串中不存在的临时字符做中转,避免替换冲突:

String result = input.replaceAll("1", "#").replaceAll("N", "1").replaceAll("#", "N");

拿你要的输出N01N01举例,假设输入是10N10N,执行流程是:

  1. 把所有1替换为# → "#0N#0N"
  2. 把所有N替换为1 → "#01#01"
  3. 把所有#替换为N → "N01N01"(完美得到目标结果)

注意:要确保临时字符#在你的输入字符串中不存在,要是有冲突,换成\u0000(空字符)或者业务中不会出现的特殊字符就行。

方法2:Matcher自定义替换(更灵活)

如果不想依赖临时字符,可以借助Pattern和Matcher的lambda替换逻辑:

String result = Pattern.compile("[1N]").matcher(input).replaceAll(match -> match.group().equals("1") ? "N" : "1");

这个方法的逻辑很清晰:

  • 用正则[1N]匹配所有1或N字符
  • 对每个匹配到的字符,通过lambda判断:是1就换成N,是N就换成1
  • 全程无临时字符干扰,适配更复杂的输入场景

两种方法都能实现你要的双向替换,根据输入字符的范围选择就行——输入字符明确无特殊符号选方法1,输入可能包含各种字符选方法2更稳妥。

内容的提问来源于stack exchange,提问作者Aristos Georgiou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:30:08