Професионална програма
Loading...
Svilen12 avatar Svilen12 3 Точки

Задача Text Filther (Java)

Здравейте, намерих решение на тази задача, защото не можах да я реша, обаче в решението има неяснота.

String[] bannedWords = scanner.nextLine().split(", ");
String text = scanner.nextLine();

for (String bannedWord : bannedWords) {
    text = text.replaceAll(bannedWord, new String(new char[bannedWord.length()])
            .replace('\0', '*'));
}
System.out.println(text); 

е решението. На редът .replace('\0', '*'));-какво ознавачава '\0' и защо то е на позиция old char? Не успях да открия и информация в интернет.

Тагове:
0
Programming Fundamentals
MartinBG avatar MartinBG 3751 Точки

С '\0' се означава т.нар. NUL (null) символ.

Това е символът на позиция 0 в ASCII таблицата и той има специално предназначение. 

В конкретния пример, с него инициализира char масива, който се подава към String конструктора и в резултат се получаа стринг с дължина bannedWord.length(), всеки символ от който е NUL ('\0').

Върху този стринг се извиква #replace('\0', '*'), който ще замени всички NUL символи с '*' и в крайна сметка ще получим стринг, с дължина bannedWord.length(), който е съставен само от *.

 

В Java 8+ горното може да се постигне и с използване на Stream:

Stream.generate(() -> "*").limit(bannedWord.length()).collect(joining());

А от Java 11 може да се напише и така:

"*".repeat(bannedWord.length());

 

Цялото решение:

String[] bannedWords = scanner.nextLine().split(", ");
String text = scanner.nextLine();

for (String bannedWord : bannedWords) {
    text = text.replaceAll(bannedWord, "*".repeat(bannedWord.length()));
}
System.out.println(text); 

 

1
Svilen12 avatar Svilen12 3 Точки

Благодаря за подробния отговор!

1