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

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

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

Java 11及更高版本

 str = "*".repeat(str.length()); 

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

Java 10及更早版本

 str = str.replaceAll(".", "*"); 

保留了换行符。

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

 str = str.replaceAll("(?s).", "*"); 

(?s)与任何东西都不匹配,但会激活DOTALL模式. 也匹配\n

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

Plain Java <8版本:

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

Plain Java> = 8版本:

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

使用番石榴 :

 return Strings.repeat("*", str.length()); // OR return CharMatcher.ANY.replaceFrom(str, '*'); 

使用Commons / Lang :

 return StringUtils.repeat("*", str.length()); 
 System.out.println("foobar".replaceAll(".", "*")); 
 public String allStar(String s) { StringBuilder sb = new StringBuilder(s.length()); for (int i = 0; i < s.length(); i++) { sb.append('*'); } return sb.toString(); } 

如何使用* =最后一个字符串char的数量创建一个新字符串?

 StringBuffer bf = new StringBuffer(); for (int i = 0; i < source.length(); i++ ) { bf.append('*'); } 

可能还有其他更快/更好的方法,但您可以使用字符串缓冲区和for循环:

 public String stringToAsterisk(String input) { if (input == null) return ""; StringBuffer sb = new StringBuffer(); for (int x = 0; x < input.length(); x++) { sb.append("*"); } return sb.toString(); } 

如果您的应用程序是单线程的,则可以使用StringBuilder,但它不是线程安全的。

我不确定这可能会更快:

 public String stringToAsterisk(String input) { if (input == null) return ""; int length = input.length(); char[] chars = new char[length]; while (length > 0) chars[--length] = "*"; return new String(chars); } 

没有任何外部库,没有自己的循环,您可以:

 String input = "Hello"; char[] ca = new char[input.length()]; Arrays.fill(ca, '*'); String output = new String(ca); 

BTW, Arrays.fill()String(char [])都非常快。