2011-09-06 84 views
18

我想用*字符替換Java字符串中的所有字符。所以它不應該是什麼字符,它應該被替換爲*如何用星號替換Java字符串中的所有字符

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

+1

每個字符包括空格? – Neifen

回答

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

注:這不會*替換換行符(\n)。要做到這一點,你需要使用

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

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

4
System.out.println("foobar".replaceAll(".", "*")); 
11

根本不要使用正則表達式,計算字符串長度並返回相應的星號。

普通的Java版本:

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

使用Guava

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

使用Commons/Lang

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

abt如何創建一個新的字符串的數量* =最後一個字符串字符數?

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

可能有其他更快/更好的方法來做到這一點,但你可以只使用一個字符串緩衝區和一個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); 
} 
0

無需任何外部庫,沒有自己的循環,你可以這樣做:

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

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

相關問題