[英]How to replace all characters in a Java string with stars
我想用*
字符替換 Java 字符串中的所有字符。 所以它是什么字符無關緊要,應該用*
替換。
我知道互聯網上有很多例子,但沒有一個可以取代每個角色,我自己也嘗試過,但沒有成功。
str = "*".repeat(str.length());
注意:這會將換行符\\n
替換為*
。 如果您想保留\\n
,請參閱下面的解決方案。
str = str.replaceAll(".", "*");
這會保留換行符。
要在 Java 10 及更早版本中用*
替換換行符,您可以使用:
str = str.replaceAll("(?s).", "*");
(?s)
不匹配任何內容,但會激活DOTALL
模式,這使得.
也匹配\\n
。
完全不要使用正則表達式,計算字符串長度,並返回相應的星數。
純 Java < 8 版本:
int len = str.length();
StringBuilder sb = new StringBuilder(len);
for(int i = =; i < len; i++){
sb.append('*');
}
return sb.toString();
純 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();
}
如何使用 * = 最后一個字符串字符的數量創建一個新字符串?
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);
順便說一句, Arrays.fill()
和String(char [])
都非常快。
String nCopies(String s, int n) {
return n == 1 ? s.replaceFirst(".$", "") : nCopies(s + s, --n);
}
String text = "Hello World";
System.out.println( text.replaceAll( "[A-Za-z0-9]", "*" ) );
輸出 : ***** *****
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.