Как заменить все символы в строке Java звездочками
Я хочу заменить все символы в строке Java символом *
. Поэтому не имеет значения, какой он характер, его следует заменить на *
.
Я знаю, что в Интернете есть куча примеров, но у меня нет никого, кто заменяет каждого персонажа, и я пробовал себя, но не добился успеха.
Ответы
Ответ 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);
}