Регулярное выражение Java: часть 8 — Извлечение текста с помощью String.Split()
Класс String предоставляет разработчикам еще одну возможность разбить строку на слова на основе определенных разделителей — метод split().
Метод split() может разбивать строку на токены с определенными разделителями, как и класс Scanner, с которым мы столкнулись в предыдущей части.
Однако есть 2 основных отличия от класса Scanner:
- Метод split() не использует пробельные символы в качестве разделителя. Поэтому, если мы хотим использовать пробельные символы в качестве разделителей, нам нужно указать это явно.
- Метод split() возвращает массив строк, содержащий извлеченные токены. Это очень удобно, если мы планируем обрабатывать эти токены позже.
Давайте посмотрим пример:
public class Demo {
public static void main(String[] args){
String tokens[];
String s = "I love you so much! But I cannot marry you.";
tokens = s.split("[ ]");
for (String token : tokens) {
System.out.println(token);
}
}
}
В программе у меня есть следующая строка:
String s = "I love you so much! But I cannot marry you.";
Я хочу разбить строку на подстроки или токены на основе пробельных символов. Я могу выполнить задачу следующим образом:
tokens = s.split("[ ]");
Поскольку метод split() возвращает массив извлеченных токенов, нам нужен цикл или что-то подобное, чтобы получить эти токены:
for (String token : tokens) {
System.out.println(token);
}
Запускаем программу и получаем вывод:
I
love
you
so
much!
But
I
cannot
marry
you.
Если вы хотите указать больше символов в качестве разделителей, вы можете сделать, как показано ниже, где я использую как пробел, так и восклицательный знак (!):
tokens = s.split("[ !]");
Полный пример:
public class Demo {
public static void main(String[] args){
String tokens[];
String s = "I love you so much! But I cannot marry you.";
tokens = s.split("[ !]");
for (String token : tokens) {
System.out.println(token);
}
System.out.println("Number of tokens: " + tokens.length);
}
}
Обратите внимание, что в приведенном выше примере я также распечатал длину массива токенов, который, конечно же, был количеством извлеченных токенов.
У меня есть вывод:
I
love
you
so
much
But
I
cannot
marry
you.
Number of tokens: 11
Это потому, что я использовал как пробел, так и восклицательный знак в качестве разделителей, и было время, когда эти два символа появлялись рядом друг с другом. И это заставило метод split() рассматривать их как пустой токен.
Если мы хотим удалить пустой токен, что означает рассматривать соседние разделители как один, нам просто нужно добавить знак плюс (+) в конце шаблона. Как показано ниже:
tokens = s.split("[ !]+");
Запускаем программу и имеем следующий результат:
I
love
you
so
much
But
I
cannot
marry
you.
Number of tokens: 10
И как видите, у нас сейчас всего 10 токенов.
Помимо использования определенных символов в качестве разделителей, мы можем передать регулярное выражение методу split() в качестве параметров.
Давайте посмотрим на следующую программу:
public class Demo {
public static void main(String[] args){
String tokens[];
String s = "I love you 4 so much. 34 I 23 want to marry you";
tokens = s.split("[\\s\\d]+");
for (String token : tokens) {
System.out.println(token);
}
System.out.println("Number of tokens: " + tokens.length);
}
}
В программе у меня есть следующая строка:
String s = "I love you 4 so much. 34 I 23 want to marry you";
И я хочу получить токены на основе цифр и пробелов. Я могу написать метод split() следующим образом:
tokens = s.split("[\\s\\d]+");
В параметризованном шаблоне у меня есть
- \s: представляет пробельные символы. Также имейте в виду, что к пробельным символам относятся: пробел, табуляция, новая строка (\n), перевод строки (\f) и возврат каретки (\r).
- \d: представляет цифры, с которыми вы уже должны быть знакомы
Запускаем программу и имеем:
I
love
you
so
much.
I
want
to
marry
you
Number of tokens: 10
Как видно из вывода, у нас всего 10 токенов, а это значит, что был пустой токен.
Предыдущая часть
Следующая часть
—
Посещать Learnbyproject.net бесплатно Курсы по регулярным выражениям и другие бесплатные курсы