Регулярное выражение Java: часть 9 — Извлечение текста с помощью java.util.StringTokenizer

В последней части вы узнали, как использовать класс Scanner и методы String.split() для разбиения строки на слова или токены.
Еще одним способом решения таких задач является использование StringTokenizer класс, который также находится в пакете java.util. Это один из старейших классов в Java, поскольку он был представлен в JDK 1.0.
Однако класс StringTokenizer может читать только из строковой переменной. Он не может читать из системного ввода, который является окном консоли, или из файла, такого как класс Scanner.
Он имеет одно сходство с классом Scanner, в котором он также использует пробел в качестве разделителя по умолчанию и поддерживает настраиваемые разделители.
Давайте для примера, как и зачем использовать старый java.util.StringTokenizer учебный класс:

import java.util.StringTokenizer;
public class Demo {
    public static void main(String[] args) {
        StringTokenizer stk;
        String s = "I love you so much! But I cannot marry you.";
        stk = new StringTokenizer(s);
        while (stk.hasMoreTokens()) {
            System.out.println(stk.nextToken());
        }
    }
}

У меня есть строка в программе, и эту строку нужно передать в качестве параметра в конструкторе:

String s = "I love you so much! But I cannot marry you.";
stk = new StringTokenizer(s);

Затем нам нужно использовать цикл while и вызвать метод:

stk.hasMoreTokens()

чтобы проверить, есть ли еще токен. По умолчанию этот метод использует пробельный символ в качестве разделителя.
Если токен есть, для чтения и возврата токена используется следующий метод:

stk.nextToken()

Это так просто. Теперь запустим программу:

I
love
you
so
much!
But
I
cannot
marry
you.

Если вы хотите указать список символов в качестве настраиваемых разделителей, вам необходимо указать второй параметр в конструкторе:

import java.util.StringTokenizer;
public class Demo {
    public static void main(String[] args) {
        StringTokenizer stk;
        String s = "I love you so much! But I cannot marry you.";
        stk = new StringTokenizer(s, " !");
        while (stk.hasMoreTokens()) {
            System.out.println(stk.nextToken());
        }
    }
}

Как и в приведенном выше коде, я использовал как пробельные символы, так и восклицательные знаки в качестве разделителей:

stk = new StringTokenizer(s, " !");

Вот вывод, если мы запустим программу:

I
love
you
so
much
But
I
cannot
marry
you.

Обратите внимание, что в приведенном выше выводе, несмотря на то, что было время, когда оба разделителя (пробел и восклицательный знак) находились рядом друг с другом (между словом much и But), StringTokenizer обрабатывал их как один разделитель, и нам не нужно было указывать квантификатор плюс знак (+), как мы делали в предыдущих примерах со сканером и методом String.split().
Даже если бы мы указали знак плюс (+), StringTokenizer использовал бы знак плюс (+) в качестве разделителя, а не квантификатора в регулярном выражении.
Это потому, что StringTokener не поддерживает регулярные выражения.
И это самое большое отличие от класса Scanner и метода String.split().
Причина отсутствия поддержки регулярных выражений в StringTokenizer заключается в том, что StringTokenizer был представлен в JDK 1.0, а до JDK 1.5 были введены регулярные выражения.
И из-за отсутствия какой бы то ни было поддержки регулярных выражений StringTokenizer не берет на себя никаких накладных расходов на анализ и обработку шаблонов регулярных выражений, что обеспечивает гораздо лучшую производительность, чем два других аналога (Scanner и String.split()) в случае выполнения очень длинный текст.
Итак, когда вам нужно проанализировать и обработать очень длинный текст и не требуются специальные регулярные выражения, примите во внимание StringTokenizer.

Предыдущая часть

Посещать Learnbyproject.net бесплатно Курсы по регулярным выражениям и другие бесплатные курсы

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

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

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