Регулярные выражения Java: часть 6 — Замена текста

Во многих случаях нам нужно заменить строку или определенные символы. Например, нам нужно заменить ошибочные или избыточные символы на правильные.
java.lang.String class в Java поддерживает 2 метода для этих целей: заменять() а также заменить все()
Например, у меня есть следующая строка:

“This is a strIng wIth some typos”

В строке есть несколько букв I в верхнем регистре, и я хочу заменить их строчной буквой i.
Код:

public class Demo {
    public static void main(String[] args) {
        String text = " This is a strIng wIth some typos ";
        text = text.replace("I", "i");
        System.out.println(text);
    }
}

В приведенном выше коде я вызвал метод replace() в классе String:

text = text.replace("I", "i");

Метод replace() принимает 2 параметра:

  • первый — это символ или подстрока, которую вы хотите заменить
  • второй — новый символ или подстрока

Метод replace() заменит все вхождения старого символа или подстроки новым. И в нашем примере кода метод заменит все символы I верхнего регистра символами i нижнего регистра.
Запустим программу и посмотрим на результат:

This is a string with some typos

Однако метод replace() не принимает регулярное выражение в качестве первого параметра.
Поэтому он не будет работать в случаях, когда мы хотим заменить определенные символы на основе определенного шаблона.
Например, если у нас есть строка, подобная следующей:

“This is 34a string 23that contain56s many typos”

В приведенной выше строке мы хотим удалить все цифры. И было бы намного удобнее, если бы мы могли указать \ д как образец для удаления.
Конечно, мы можем использовать метод replace() для достижения цели, но тогда нам нужно указать отдельные символы в качестве замены.
У нас есть лучшее решение: заменить все() метод.
Метод replaceAll() работает аналогично аналогу replace() с одним существенным отличием: он поддерживает регулярное выражение в качестве первого параметра.
Давайте посмотрим код:

public class Demo {
    public static void main(String[] args) {
        String text = "This is 34a string 23that contain56s many typos";
        text = text.replaceAll("\\d", "");
        System.out.println(text);
    }
}

В приведенном выше коде я вызвал метод String.replaceAll() следующим образом:

text = text.replaceAll("\\d", "");
  • Первым параметром должен быть \d, потому что мы хотим удалить все цифры во входной строке.
  • Второй параметр — это новая строка, которую нужно заменить. Так как мы хотим удалить цифры, здесь следует добавить пустой символ.

Запустим программу и увидим, что все цифры пропали:

This is a string that contains many typos

Возьмем другой.

String s2 = "This is te$xt wi%th s\*ome spe!cial characters in in";
        String nonePrintableCharsPattern = "[^\\w ]";
        String newString2 = s2.replaceAll(nonePrintableCharsPattern, "");
        System.out.println(newString2);

У меня есть другой текст, содержащий некоторые непреднамеренные специальные символы: знак доллара, знак процента, звездочку и восклицательный знак. Эти специальные символы необходимо удалить.
Так как спецсимволов много, в шаблонах проще указать, что мы хотим сохранить, а не что мы хотим удалить.
Итак, в шаблоне я использую символ вставки (^), за которым следует \w и пробел. Этот шаблон означает: удалить все, кроме тех, которые представлены w и пробелом.
Почему пробел? Поскольку символ \w представляет только символы верхнего и нижнего регистра от a до z и цифры от 0 до 9, не включая пробелы. Поэтому, если мы не укажем пробелы в нашем шаблоне, все пробелы будут удалены.
Запустите программу, и вы увидите вывод:

This is text with some special characters in it

Предыдущая часть

Следующая часть

Посещать Learnbyproject.net бесплатно Курсы по регулярным выражениям и другие бесплатные курсы

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *