我需要转换一个字符串
"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("").
任何字符串中的任意两个字符之间,都有一个空字符串。事实上,这些位置有无数个空字符串。(是的,对于空字符串本身也是如此。这是一个“空”字符串
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/