Регулярные выражения 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 бесплатно Курсы по регулярным выражениям и другие бесплатные курсы