— Привет, Амиго!

Насколько я знаю, Риша уже рассказал тебе о регулярных выражениях.

— Да, было очень интересно.

— Отлично, теперь я расскажу тебе о работе со строками с помощью регулярных выражений.

Начнем мы с самого простого:

1) Как проверить, совпадает ли строка с шаблоном, заданным регулярным выражением:

Для этого есть метод matches, в который передается строка, хранящая регулярное выражение, а метод возвращает true или false.

Метод(ы) Пример(ы)
boolean matches(String regex)
String s = "Good news everyone!";
Boolean test = s.matches("news.*");
Результат:

false (строка не начинается со слова news)

2) Как заменить все подстроки, заданные маской, на нужные нам?

Для этого есть два метода.

Метод replaceAll заменяет все вхождения одной подстроки на другую.

Метод replaceFirst заменяет первое вхождение переданной подстроки на заданную подстроку.

Метод(ы) Пример(ы)
String replaceAll(String regex, String replacement)
String s = "Good neweveryone!";
String s2 = s.replaceAll("e.", "EX");
Результат:

s2 == "Good nEXs EXEXyonEX";
String replaceFirst(String regex, String replacement)
String s = "Good news everyone!";
String s2 = s.replaceFirst("e.", "EX");
Результат:

s2 == "Good nEXs everyone!";

3) Как разбить строку на части?

Для этого есть метод split, который принимает маску подстроки-разделителя:

Метод(ы) Пример(ы)
String[] split(String regex)
String s = "Good news everyone!";
String[] ss = s.split("ne");
System.out.println(Arrays.toString(ss));
Результат (будет массив из трех строк):

[Good , ws everyo, !]
"Good ", "ws everyo", "!";

Есть еще один способ разбиения строки на части – с помощью класса StringTokenizer.

Этот класс не использует регулярные выражения, вместо этого в него просто передается строка, состоящая из символов-разделителей. Преимущества этого подхода в том, что он не разбивает сразу всю строку на кусочки, а потихоньку идет от начала к концу.

В конструктор с двумя параметрами нужно передать строку, которую мы разбиваем на части, и строку – набор символов, используемых для разделения.

Метод nextToken() возвращает очередной токен – подстроку.

Метод hasMoreTokens() возвращает true, если еще остались не отданные подстроки.

Метод(ы) Пример(ы)

boolean hasMoreTokens()

String nextToken()

String s = "Good news everyone!";

StringTokenizer tokenizer =
new StringTokenizer(s, "ne");
while (tokenizer.hasMoreTokens())
{
String token = tokenizer.nextToken();
System.out.println(token);
}
Вывод на экран будет таким:


Good 
ws 
v
ryo
!

Обрати внимание, что разделителем считается любой символ, переданный во второй строке в конструктор StringTokenizer.

— Да, тут тоже все понятно. Может я не сразу смогу сам написать такой код, но то, что тут происходит, мне ясно.

— Отлично, тогда будем считать, что тему ты освоил.