Dee*_*epL 4 java regex string replace
我需要转换一个字符串
"string"
Run Code Online (Sandbox Code Playgroud)
至
"*s*t*r*i*n*g*"
Run Code Online (Sandbox Code Playgroud)
什么是正则表达式?语言是Java.
pol*_*nts 23
您想匹配一个空字符串,并替换为"*".所以,像这样的工作:
System.out.println("string".replaceAll("", "*"));
// "*s*t*r*i*n*g*"
Run Code Online (Sandbox Code Playgroud)
或者更好的是,由于空字符串可以在没有正则表达式的情况下按字面匹配,您可以这样做:
System.out.println("string".replace("", "*"));
// "*s*t*r*i*n*g*"
Run Code Online (Sandbox Code Playgroud)
这是因为一个字符串的任何实例startsWith(""),并且endsWith(""),和contains("").任何字符串中的任何两个字符之间,有一个空字符串.事实上,这些位置有无数个空字符串.
(是的,对于空字符串本身也是如此.这本身就是一个"空"字符串contains!).
String.replace当在这些情况下寻找下一个匹配时,正则表达式引擎会自动推进索引以防止无限循环.
没有必要这样做,但这里显示的是出于教育目的:这样的东西也有效:
System.out.println("string".replaceAll(".?", "*$0"));
// "*s*t*r*i*n*g*"
Run Code Online (Sandbox Code Playgroud)
这通过将"任何"字符与后面的组0 匹配.,并将其替换*为该字符来实现.
要为最后一个字符添加星号,我们允许.可选地匹配.?.这样做是因为?贪婪并且如果可能的话总是会占用一个角色,即除了最后一个角色之外的任何地方.
如果字符串可能包含换行符,则使用Pattern.DOTALL/(?s)mode.
我认为""是你想要的正则表达式.
System.out.println("string".replaceAll("", "*"));
Run Code Online (Sandbox Code Playgroud)
这打印*s*t*r*i*n*g*.