簡體   English   中英

如何用星號替換 Java 字符串中的所有字符

[英]How to replace all characters in a Java string with stars

我想用*字符替換 Java 字符串中的所有字符。 所以它是什么字符無關緊要,應該用*替換。

我知道互聯網上有很多例子,但沒有一個可以取代每個角色,我自己也嘗試過,但沒有成功。

Java 11 及更高版本

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

注意:這會將換行符\\n替換為* 如果您想保留\\n ,請參閱下面的解決方案。

Java 10 及更早版本

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM