如何用星号替换Java字符串中的所有字符

ano*_*ous 29 java regex

我想用字符替换Java String中的所有*字符.所以它应该是什么特性并不重要,它应该被替换为*.

我知道互联网上有大量的例子,但没有一个可以取代每一个角色而且我已经尝试过但没有成功.

aio*_*obe 58

Java 11及更高版本

str = "*".repeat(str.length());
Run Code Online (Sandbox Code Playgroud)

注意:这将替换换行符\n*.如果要保留\n,请参阅下面的解决方案.

Java 10及更早版本

str = str.replaceAll(".", "*");
Run Code Online (Sandbox Code Playgroud)

保留了换行符.

*在Java 10及更早版本中替换换行符,您可以使用:

str = str.replaceAll("(?s).", "*");
Run Code Online (Sandbox Code Playgroud)

(?s)不匹配任何东西,但激活DOTALL模式,这使得.也匹配\n.


Sea*_*oyd 17

根本不要使用正则表达式,计算字符串长度,并返回相应的星数.

Plain Java <8版本:

int len = str.length();
StringBuilder sb = new StringBuilder(len);
for(int i = =; i < len; i++){
    sb.append('*');
}
return sb.toString();
Run Code Online (Sandbox Code Playgroud)

普通Java> = 8版本:

int len = str.length();
return IntStream.range(0, n).mapToObj(i -> "*").collect(Collectors.joining());
Run Code Online (Sandbox Code Playgroud)

使用番石榴:

return Strings.repeat("*", str.length());
// OR
return CharMatcher.ANY.replaceFrom(str, '*');
Run Code Online (Sandbox Code Playgroud)

使用Commons/Lang:

return StringUtils.repeat("*", str.length());
Run Code Online (Sandbox Code Playgroud)

  • 我认为应该是“你根本不需要正则表达式”而不是“根本不使用正则表达式”。后者表明正则表达式是一个错误的解决方案。 (2认同)

Sah*_*hoo 5

System.out.println("foobar".replaceAll(".", "*"));
Run Code Online (Sandbox Code Playgroud)