Рубрики
Без рубрики

Регулярное выражение Java: часть 8 – Извлечение текста с помощью строки. Разделить()

Класс String предоставляет разработчикам еще один вариант разделения строки на слова на основе определенных разделителей-метод split (). Метод split() может разбивать строку на токены с определенными…

Автор оригинала: Sera.Ng.

Класс String предоставляет разработчикам еще один вариант разделения строки на слова на основе определенных разделителей-метод split (). Метод split() может разбивать строку на токены с определенными разделителями, как и класс сканера, с которым мы столкнулись в предыдущей части. Однако есть 2 основных отличия от класса сканеров:

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

Оригинал: “https://www.codementor.io/@seranguyen/java-regular-expression-part-8-extracting-text-with-string-split-tq742g14q”