如何用星号替换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 [])
都非常快。
- 具有双向O(1)查找的数据结构。 哈希表?
- 如何外化web.xml servlet init-param? Servlets的Spring DelegatingFilterProxy?
- 403使用AJAX进行PUT和DELETE时的状态(禁止)
- 如何使用匿名内部类actionlistener使JButton在单击时删除自身?
- Java:将背景图像添加到框架
- Joda-time:今年ISO第1周的第一天
- 在Scala中实现内部特征,就像在Java中使用内部接口一样
- 如何在运行grizzly的java se上启用web服务(jaxrs / jersey)中的CDI注入?
- case-statement或if-statement效率透视