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

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

В последней части вы узнали, как использовать класс сканера и методы String.split (), чтобы разбить строку на слова или токены. Другим способом выполнения таких задач является использование StringTokenizer…

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

В последней части вы узнали, как использовать класс сканера и методы String.split (), чтобы разбить строку на слова или токены. Другим способом выполнения таких задач является использование класса StringTokenizer , который также находится в пакете java.util. Это один из старейших классов в Java с тех пор, как он был представлен в JDK 1.0. Однако класс StringTokenizer может считывать только из строковой переменной. Он не может считывать данные из системного ввода, которым является окно консоли, или из файла, такого как класс сканера. Он имеет одно сходство с классом сканера, в котором он также использует пробелы в качестве разделителя по умолчанию и поддерживает пользовательские разделители. Давайте рассмотрим пример того, как и зачем использовать старый 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.

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

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

Посетите learnbyproject.net для бесплатных Курсов регулярного выражения и других бесплатных курсов

Оригинал: “https://www.codementor.io/@seranguyen/java-regular-expression-part-9-extracting-text-with-java-util-stringtokenizer-tq7lg2ym3”