Главная » Java » StringTokenizer

0

 

   Объект класса позволяет выполнять лексический анализ строки с разбиением последней на лексемы с учетом заданного множества символов-разделителей. Последовательность лексем, вычлененных из строки, по сути представляет собой упорядоченный перечень (enumeration), поэтому класс реализует интерфейс Enumeration (см. раздел 16.12.1 на странице 471). В составе класса предложены методы, более специализированные в сравнении с методами интерфейса Enumeration. Коллекция лексем, создаваемая объектом на основе заданной строки и набора разделителей, фактически является моментальным снимком (snapshot) исходных данных, поскольку объекты String по определению не допускают изменения. Вот как, например, может выглядеть цикл разбиения строки на лексемы, если в роли разделителей выступают символы пробела и тире:

 

String str = "Сделал дело – гуляй смело!";

tokens = new (str, " -");

while(tokens. hasMoreTokens())

      System.out.print!n(tokens.nextToken());

В результате выполнения приведенного фрагмента кода будет получено следующее:

Сделал

 дело

 гуляй

смело!

 

   Класс содержит набор методов (они, наряду с конструкторами, кратко описаны ниже), которые позволяют управлять различными аспектами процесса  лексического  анализа  и  регламентировать,   что   надлежит  считать  словом, должны ли числовые и буквенные символы трактоваться особым образом и т.п.

 

 public stringTokenizer(string str,  string delim,  boolean returnTokens)

Создает объект на основе заданных строки str и набора символов-разделителей delim. Параметр returnTokens определяет, следует ли возвращать разделители в виде лексем или нет. Если значение returnTokens равно true, каждый разделитель будет возвращен как самостоятельная лексема.

 public (string str,  String delim)

Метод аналогичен предыдущему при условии stringTokenizer(str, delim, false) (символы-разделители в итоговый набор лексем не включаются).

public (String str)

Метод аналогичен предыдущему при условии (str, " \t\n\r\f") (разделителями считаются символы пробела; разделители в итоговый набор лексем не включаются).

public boolean hasMoreTokens()

Возвращает значение true, если очередная лексема строки существует.

public String nextToken()

Возвращает очередную лексему строки. Если таковая не существует, выбрасывается исключение типа NoSuchElementException.

public String nextToken(String delim)

Устанавливает новый набор символов-разделителей, задаваемый параметром delim, и возвращает очередную лексему строки. Если таковая не существует, выбрасывается исключение типа NoSuchElementException. Способы задания нового набора разделителей, исключающие необходимость получения очередной лексемы, отсутствуют.

public int countTokens()

Возвращает количество оставшихся лексем с учетом текущего набора символов-разделителей. Возвращаемое значение равно количеству вызовов метода nextToken до того момента, когда он выбросит исключение NoSuchElementException. Если необходимо получить количество оставшихся лексем, метод гораздо более эффективен в сравнении с циклическим вызовом nextToken, поскольку лексемы просто подсчитываются — их не нужно конструировать и возвращать.

  Методы hasMoreElements и nextElement интерфейса Enumeration, реализуемые классом , аналогичны методам hasMoreTokens и nextToken соответственно.

  В разделе 15.4.12 рассмотрен класс StreamTokenizer, обладающий более широкими функциональными возможностями, нежели . Чтобы применить средства StreamTokeni zer по отношению к строке, следует создать на основе этой строки объект класса StringReader. Во многих случаях, однако, возможностей класса вполне достаточно.

 

Источник: Арнолд, Кен, Гослинг, Джеймс, Холмс, Дэвид. Язык программирования Java. 3-е изд .. : Пер. с англ. – М. : Издательский дом «Вильяме», 2001. – 624 с. : ил. – Парал. тит. англ.

По теме:

  • Комментарии