Автор оригинала: Sera.Ng.
Есть много случаев, когда нам нужно заменить строку или определенные символы. Например, нам нужно заменить ошибочные или избыточные символы правильными. java.lang. Класс String в Java поддерживает 2 метода для этих целей: replace() и заменить все() Например, у меня есть строка следующего содержания:
"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"
В приведенной выше строке мы хотим удалить все цифры. И было бы гораздо удобнее, если бы мы могли указать \d в качестве шаблона для удаления. Конечно, мы можем использовать метод replace() для выполнения задачи, но тогда нам нужно указать отдельные символы в качестве замены. У нас есть лучшее решение: метод replaceAll () . Метод replaceAll() работает аналогично аналогу replaceall() с одним существенным отличием: он поддерживает регулярное выражение в качестве своего первого параметра. Давайте посмотрим код:
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);
У меня есть еще один текст, содержащий несколько непреднамеренных специальных символов: знак доллара, знак процента, символ звезды и восклицательный знак. Эти специальные символы необходимо удалить. Поскольку существует много специальных символов, в шаблонах проще указать, что мы хотим сохранить, а не то, что мы хотим удалить. Поэтому в шаблоне я использую символ-каретку ( ^ ), за которым следует пробел \wanda. Этот шаблон означает: удалите все, кроме тех, которые представлены символом w и пробелом . Почему пустое место? Потому что символ \w представляет только символы верхнего и нижнего регистра от a до z и цифры от 0 до 9, не включая пробелы. Поэтому, если мы не укажем пробелы в нашем шаблоне, все пробелы будут удалены. Запустите программу, и вы увидите результат:
This is text with some special characters in it
Предыдущая часть
Следующая часть
—
Посещение learnbyproject.net для бесплатных Курсов регулярного выражения и других бесплатных курсов
Оригинал: “https://www.codementor.io/@seranguyen/java-regular-expression-part-6-replacing-text-rc9xnxrhl”