Как заменить текст в строке
Короткий ответ
replace() заменяет все вхождения подстроки:
void main() {
String text = "I like cats. Cats are cute.";
IO.println(text.replace("cats", "dogs"));
}Результат:
I like dogs. Cats are cute.Замена учитывает регистр, поэтому Cats с большой буквы осталось.
Регулярное выражение
replaceAll() принимает регулярное выражение. Флаг (?i) отключает учёт регистра:
void main() {
String text = "I like cats. Cats are cute.";
IO.println(text.replaceAll("(?i)cats", "dogs"));
IO.println("Phone: 8-900-123-45-67".replaceAll("\\D", ""));
}Результат:
I like dogs. dogs are cute.
89001234567Только первое вхождение
replaceFirst() заменяет одно, самое первое совпадение:
void main() {
IO.println("a-b-c".replaceFirst("-", "+"));
}Результат:
a+b-cНесколько замен
Пары «что — на что» удобно хранить в Map и применять в цикле:
void main() {
var replacements = Map.of("{name}", "Anna", "{city}", "Berlin");
String text = "Hi, {name} from {city}!";
for (var entry : replacements.entrySet()) {
text = text.replace(entry.getKey(), entry.getValue());
}
IO.println(text);
}Результат:
Hi, Anna from Berlin!Частая ошибка
Строки неизменяемы: replace() возвращает новую строку, а исходная остаётся прежней:
void main() {
String text = "hello";
text.replace("h", "H");
IO.println(text);
text = text.replace("h", "H");
IO.println(text);
}Результат:
hello
HelloФункции из этого ответа
- String.replace() — Заменяет все вхождения подстроки или символа на другую строку.
- String.replaceAll() — Заменяет все совпадения регулярного выражения.