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

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

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

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