Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как заменить текст в строке

Короткий ответ

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() — Заменяет все совпадения регулярного выражения.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.