Как заменить все символы в строке Java звездами - PullRequest
27 голосов
/ 06 сентября 2011

Я хочу заменить все символы в строке Java на *.Так что не имеет значения, какой это символ, его следует заменить на *.

Я знаю, что в Интернете есть куча примеров, но не один, который заменяет каждого персонажа, и я попробовал самно безуспешно.

Ответы [ 7 ]

55 голосов
/ 06 сентября 2011

Java 11 и более поздние версии

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

Примечание: Заменяет символы новой строки \n на *. Если вы хотите сохранить \n, см. Решение ниже.

Java 10 и более ранние

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

Это сохраняет переводы строки.

Чтобы заменить символы новой строки на *, а также в Java 10 и более ранних версиях, вы можете использовать:

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

(?s) ничего не соответствует, но активирует режим DOTALL, в котором . также соответствует \n.

17 голосов
/ 06 сентября 2011

Ни в коем случае не используйте регулярные выражения, считайте длину строки и возвращайте соответствующее количество звезд.

Обычная Java <8 Версия: </strong>

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());
5 голосов
/ 06 сентября 2011
System.out.println("foobar".replaceAll(".", "*"));
3 голосов
/ 06 сентября 2011
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 голос
/ 06 сентября 2011

Без какой-либо внешней библиотеки и без собственного цикла вы можете сделать:

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

Кстати, и Arrays.fill(), и String(char []) действительно быстрые.

1 голос
/ 06 сентября 2011

Могут быть другие более быстрые / лучшие способы сделать это, но вы можете просто использовать строковый буфер и цикл 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);
}
1 голос
/ 06 сентября 2011

Как создать новую строку с номером * = номер последней строки char?

StringBuffer bf = new StringBuffer();
for (int i = 0; i < source.length(); i++ ) {
    bf.append('*');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...