2011-09-06 84 views
18

Tôi muốn thay thế tất cả các ký tự trong một chuỗi Java với ký tự *. Vì vậy, nó không quan trọng những gì nó là nhân vật, nó nên được thay thế bằng một *.Làm thế nào để thay thế tất cả các ký tự trong một chuỗi Java với các ngôi sao

Tôi biết có rất nhiều ví dụ trên internet nhưng không có thay thế mọi nhân vật và tôi đã cố gắng nhưng không thành công.

+1

mọi ký tự bao gồm cả dấu cách? – Neifen

Trả lời

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

Lưu ý: này sẽ không thay thế các dấu ngắt dòng (\n) với *. Để làm điều này, bạn sẽ cần phải sử dụng

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

Các (?s) không phù hợp với bất cứ điều gì nhưng kích hoạt DOTALL chế độ mà làm . cũng phù hợp \n.

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

Không sử dụng regex, đếm chiều dài chuỗi và trả về số sao theo.

Plain Java Version:

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

Sử dụng Guava:

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

Sử dụng 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

Làm cách nào để tạo chuỗi mới với số lượng * = số chuỗi cuối cùng của char?

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

Có thể có nhanh hơn/cách khác tốt hơn để làm điều đó, nhưng bạn chỉ có thể sử dụng một bộ đệm chuỗi và một cho vòng lặp:

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(); 
} 

Nếu ứng dụng của bạn là đơn luồng, bạn có thể sử dụng StringBuilder thay vào đó, nhưng nó không phải là chủ đề an toàn.

Tôi không chắc chắn nếu điều này có thể là bất kỳ nhanh hơn:

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

Nếu không có bất kỳ thư viện bên ngoài và không có vòng lặp của riêng bạn, bạn có thể làm:

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

BTW, cả Arrays.fill()String(char []) là rất nhanh.

Các vấn đề liên quan