Подтвердить что ты не робот

Как заменить все символы в строке Java звездочками

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

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

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

Ответ 2

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

Обычная Ява & lt; 8 версия:

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

Ответ 3

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

Ответ 4

public String allStar(String s) {
    StringBuilder sb = new StringBuilder(s.length());
    for (int i = 0; i < s.length(); i++) {
        sb.append('*');
    }
    return sb.toString();
}

Ответ 5

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

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

Ответ 6

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

Ответ 7

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

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

BTW, как Arrays.fill(), так и String(char []) выполняются очень быстро.

Ответ 8

Рекурсивный метод

String nCopies(String s, int n) {
    return n == 1 ? s.replaceFirst(".$", "") : nCopies(s + s, --n);
}