java - 如何将 "string"转换为 "*s*t*r*i*n*g*"

标签 java regex replace string

我需要像这样转换一个字符串

"string"

"*s*t*r*i*n*g*"

什么是正则表达式模式?语言是 Java。

最佳答案

你想匹配一个空字符串,用"*"替换。所以,这样的事情是可行的:

System.out.println("string".replaceAll("", "*"));
// "*s*t*r*i*n*g*"

或者更好的是,因为空字符串可以在没有正则表达式的情况下按字面匹配,你可以这样做:

System.out.println("string".replace("", "*"));
// "*s*t*r*i*n*g*"

为什么这行得通

这是因为字符串 startsWith("")endsWith("") 以及 contains("") 的任何实例。 在任意字符串的任意两个字符之间,有一个空字符串。事实上,在这些位置有无数个空字符串。

(是的,对于空字符串本身也是如此。这是一个“空”字符串包含本身!)。

在这种情况下,正则表达式引擎和 String.replace 会在寻找下一个匹配项时自动推进索引,以防止无限循环。


“真正的”正则表达式解决方案

不需要这个,但出于教育目的在此处显示:类似这样的东西也可以:

System.out.println("string".replaceAll(".?", "*$0"));
// "*s*t*r*i*n*g*"

这通过将“任何”字符与 匹配来实现。,并通过向后引用组 0 将其替换为 * 和该字符。

要为最后一个字符添加星号,我们允许 . 可选地与 .? 匹配。这是有效的,因为 ? 是贪婪的,并且如果可能的话总是会取一个字符,即除了最后一个字符之外的任何地方。

如果字符串可能包含换行符,则使用Pattern.DOTALL/(?s)模式。

引用资料

关于java - 如何将 "string"转换为 "*s*t*r*i*n*g*",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3282956/

相关文章:

java - arch linux 中的 mvn clean install 产生许多错误

java - 委托(delegate) "task"(例如 :Runnable) inside a method of a Session Bean

regex - 在 Scala 中使用正则表达式进行分组和模式匹配

javascript - 如何在Jquery中将每个字符替换为其他字符

javascript - 使用预制字符串进行文本替换,并使用 javascript 在 html 中使用按钮

python - 正则表达式替换 Python 中奇数重复出现的字符

java - 无法在 PDF 中保存阿拉伯语单词 - PDFBox Java

javascript - 通过 WebSocket (BinaryWebSocketFrame) 和 Netty 上传文件

regex - 可选捕获组不捕获

java - 使用正则表达式查找带@的单词