web-dev-qa-db-fra.com

Comment remplacer tous les caractères d'une chaîne Java par des étoiles

Je souhaite remplacer tous les caractères d'une chaîne Java par le caractère *. Donc quel que soit le caractère, il devrait être remplacé par un *.

Je sais qu’il existe une foule d’exemples sur Internet, mais aucun n’a remplacé tous les personnages et j’ai essayé moi-même mais sans succès.

25
anonymous

Java 11 et ultérieur

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

Note: Ceci remplace les nouvelles lignes \n par *. Si vous souhaitez conserver \n, voir la solution ci-dessous.

Java 10 et versions antérieures

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

Ceci conserve newlines.

Pour remplacer également les nouvelles lignes par * dans Java 10 et versions antérieures, vous pouvez utiliser:

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

Le (?s) ne correspond à rien mais active DOTALL mode qui fait que . correspond également à \n.

51
aioobe

N'utilisez pas du tout regex, comptez la longueur de la chaîne et renvoyez le nombre correspondant d'étoiles.

Plain Java <8 Version:

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

Plain Java> = 8 Version:

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

Utilisation de Goyave :

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

Utiliser Commons/Lang :

return StringUtils.repeat("*", str.length());
13
Sean Patrick Floyd
System.out.println("foobar".replaceAll(".", "*"));
5
Sahil Muthoo
public String allStar(String s) {
    StringBuilder sb = new StringBuilder(s.length());
    for (int i = 0; i < s.length(); i++) {
        sb.append('*');
    }
    return sb.toString();
}
3
Stephen C

Comment créer une nouvelle chaîne avec le nombre de * = nombre du dernier caractère de chaîne?

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

Il y a peut-être d'autres façons plus rapides/meilleures de le faire, mais vous pouvez simplement utiliser un tampon de chaîne et une boucle 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 votre application utilise un seul thread, vous pouvez utiliser StringBuilder à la place, mais le thread n'est pas sécurisé.

Je ne sais pas si cela pourrait être plus rapide:

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

Sans aucune bibliothèque externe et sans votre propre boucle, vous pouvez faire:

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

BTW, Arrays.fill() et String(char []) sont très rapides.

0
Michał Šrajer