Cómo reemplazar todos los caracteres en una cadena de Java con estrellas

Quiero reemplazar todos los caracteres en un Java String con * carácter. Por lo tanto, no debería importar qué personaje sea, debería reemplazarse con un * .

Sé que hay montones de ejemplos allí en Internet, pero no tengo uno que reemplace a todos los personajes y lo he intentado pero no he tenido éxito.

Java 11 y posterior

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

Nota: Esto reemplaza las líneas nuevas \n con * . Si desea conservar \n , consulte la solución a continuación.

Java 10 y versiones anteriores

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

Esto preserva las nuevas líneas.

Para reemplazar las líneas nuevas con * también en Java 10 y versiones anteriores, puede usar:

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

El (?s) no coincide con nada pero activa el modo DOTALL que lo hace . también coincide \n .

No use regex en absoluto, cuente la longitud de la cadena y devuelva el número correspondiente de estrellas.

Plain Java <8 Version:

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

Java simple> = 8 Versión:

 int len = str.length(); return IntStream.range(0, n).mapToObj(i -> "*").collect(Collectors.joining()); 

Usando Guava :

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

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

¿Cómo crear una nueva cadena con el número de * = número de la última cadena?

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

Puede haber otras formas más rápidas / mejores de hacerlo, pero podría usar un búfer de cadena y un bucle 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(); } 

Si su aplicación tiene un solo subproceso, puede usar StringBuilder, pero no es seguro para subprocesos.

No estoy seguro de si esto podría ser más rápido:

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

Sin ninguna biblioteca externa y sin su propio bucle, puede hacer:

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

Por cierto, ambos Arrays.fill() y String(char []) son realmente rápidos.