Класс StringTokenizer, примеры использования в Java

Класс StringTokenizer, примеры использования в Java

Обработка текста зачастую предполагает синтаксический анализ или разбор форматированной входной строки. Синтаксический анализ подразумевает разделе­ние текста на ряд отдельных частей, так называемых лексем, которые способны пе­редать в определенной последовательности некоторое семантическое значение.

Класс StringTokenizer обеспечивает первую стадию процесса синтаксического анализа, и поэтому его зачастую называют лексическuм анализатором или просто сканером. Этот класс реализует интерфейс Enumeration. Таким образом, задав вход­ную строку, средствами класса StringTokenizer можно перечислить содержащи­еся в ней отдельные лексемы.

Чтобы воспользоваться классом StringTokenizer, следует указать входную и символьную строку, содержащую разделители. Разделители это символы, раз­деляющие лексемы.

Каждый символ в символьной строке разделителей рассма­тривается как допустимый разделитель. Например, символьная строка «,;:» уста­навливает в качестве разделителей запятую, точку с запятой и двоеточие. Набор разделителей, выбираемых по умолчанию, состоит из пробельных символов: про­бела, знака табуляции, перевода строки и возврата каретки.

Ниже приведены конструкторы класса StringTokenizer.

Во всех трех формах конструктора параметр строка обозначает разделяе­мую на лексемы символьную строку. В первой форме используются разделители по умолчанию, во второй и в третьей формах параметр разделители обозначает символьную строку, задающую разделители.

В третьей форме разделители возвращаются в качестве отдельных лексем при синтаксическом анализе символьной строки, если параметр разделитель_как_лексема принимает логическое значе­ние true. В противном случае разделители не возвращаются. Разделители не возвращаются и в первых двух формах конструктора данного класса.

Как только объект класса StringTokenizer будет создан, можно вызвать его метод nextToken(), чтобы извлечь последовательные лексемы.

Метод hasMoreTokens() возвращает логическое значение true до тех пор, пока для извлечения еще имеются лексемы.

А поскольку класс StringTokenizer реализует интерфейс Enumeration, то его методы hasMoreElements() и nextElement() также реализованы и действуют точно так же, как и методы hasMoreTokens() и nextToken() соответственно. Методы из класса StringTokenizer перечислены ниже:

  • int countTokens() — используя текущий набор разделителей, определяет количество лексем, которые осталось разобрать и возвратить в качестве результата
  • boolean hasМoreElements() — возвращает логическое значение true, если в символьной строке остается одна лексема или больше, а иначе — логиче­ское значение false
  • boolean hasМoreTokens() — возвращает логическое значение true, если в символьной строке остается одна лексема или больше, а иначе — логиче­ское значение false
  • Object nextElement() — возвращает следующую лексему в виде объекта типа Object
  • String nextToken() — возвращает следующую лексему в виде объекта типа String
  • String nextToken(String разделители) — возвращает следующую лексему в виде объекта типа Object и задает символьную строку разделителей в соответствии со значением параметра разделители

Ниже приведен пример программы, в которой объект класса StringTokenizer создается для синтаксического анализа пар «ключ-значение». Последовательный ряд пар «ключ-значение» разделяется точкой с запятой.

Эта программа выводит следующий результат:

Интересное видео по теме для Java программистов: