java替换字符串中的值映射
假设我有一个String text = "abc"
,我想替换一个值映射,例如:
a->b
b->c
c->a
你会怎么做
因为很明显:
map.entrySet().forEach(el -> text = text.replaceAll(el.getKey(), el.getValue()))
不起作用,因为第二个替换也将覆盖第一个替换(最后您将不会得到bca
)
那么,您将如何避免这种“替换以前的替换”
我看到了this answer,但我希望有一个更简洁、更幼稚的解决方案(希望没有使用Apache外部包)
顺便说一下字符串也可以是多个字符
# 1 楼答案
我用java streams提出了这个解决方案
输出
# 2 楼答案
Java 8之后,有一个名为^{} 的方法返回一个IntStream,从中可以获得一个与该字符所表示的整数对应的字符,并使用映射将其映射
如果你的地图是字符串对字符串的地图,那么你可以使用:
如果你的地图是字符对字符的,那么只需删除字符串即可。价值
# 3 楼答案
这是一个问题,我会正常处理正则表达式替换。Java中的代码有点冗长,但这应该是可行的:
它相对简单,但有点冗长,因为Java。首先,创建一个regex表达式,该表达式将接受映射中的任何键(使用
Pattern.quote()
对它们进行清理),然后使用lambda replacement在找到实例时从映射中提取适当的替换性能密集型部分首先只是编译正则表达式;替换本身应该只通过字符串一次
应与Java 1.9+兼容