Главная » Java » Класс String Tokenizer

0

Класс StringTokenizer делит строку на части, используя для этого символы-разделители. Последовательность лексем, выделенных из строки, фактически представляет собой упорядоченный объект-перечисление, поэтому класс StringTokenizer реализует интерфейс Enumeration. Вы можете передавать объекты StringTokenizer методам, которые обрабатывают объекты-перечисления, или воспользоваться методами Enumeration для проведения итераций. StringTokenizer также предоставляет ряд методов с более конкретной типизацией. Перечисление StringTokenizer не гарантирует фиксации

исходного состояния, но это не имеет значения, поскольку объекты String доступны только для чтения. Например, для деления строки на лексемы, отделяемые запятыми и пробелами, может использоваться следующий цикл:

String str = "Gone, and forgotten";

StringTokenizer tokens = new StringTokenizer(str, " ,");

while (tokens.hasMoreTokens()) System.out.println(tokens.nextToken());

Запятая включена в список разделителей в конструкторе StringTokenizer для того, чтобы анализатор “поглощал” запятые вместе с пробелами, оставляя только слова, которые возвращаются по одному. Результат работы примера выглядит следующим образом:

Gone

and forgotten

Класс StringTokenizer содержит несколько методов, которые определяют, что считать

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

public StringTokenizer(String str, String delim, boolean returnTokens)

Конструирует объект StringTokenizer для строки str с использованием  символов из строки delim в качестве разделителей. Логическое значение returnTokens определяет, следует ли возвращать разделители как лексемы или же пропускать их. В первом случае каждый символ-разделитель возвращается отдельно.

public StringTokenizer(String str, String delim)

Эквивалентен StringTokenizer(str,  delim, false), то есть разделители пропускаются. public StringTokenizer(String str)

Эквивалентен StringTokenizer(str,  “ \t\n\r”), то есть используются стандартные символы-

разделители.

public boolean HasMoreTokens()

Возвращает true, если в строке еще остаются лексемы. public String nextToken()()

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

public String nextToken(String  delim)

Заменяет набор символов-разделителей на символы из строки delim и возвращает следующую лексему. Невозможно изменить набор символов-разделителей, не получая следующей лексемы.

public int countTokens()

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

Два метода класса StringTokenizer, унаследованные  от интерфейса Enumeration (hasMoreElements и nextElement), эквивалентны методам hasMoreTokens и nextToken соответственно.

Если вам понадобится более мощный механизм для деления строки или другого входного значения на лексемы, обратитесь к разделу “Класс Stream Tokenizer”, в котором описывается класс с большими возможностями по части распознавания ввода. Чтобы воспользоваться  классом Stream Tokenizer для строки, создайте для нее объект StringBufferInputStream. Тем не менее во многих случаях бывает достаточно и простого класса String Tokenizer.

Упражнение 12.9

Напишите метод, который получает строку, делит ее на лексемы с использованием стандартных символов-разделителей и возвращает новую строку, в которой первая буква каждого слова преобразована в заглавный регистр.

Глава 13

ПРИМЕНЕНИЕ ТИПОВ

В ПРОГРАММИРОВАНИИ

Я завернусь в бумагу,

Я намажусь клеем.

Наклейте мне на голову марку! Я пришлю тебе себя по почте. Вуди Гатри, Почтовая песня

Типы в языке Java представлены классами. Почти для каждого из примитивных типов (int, boolean и т. д.) существует отдельный класс, известный под названием “оболочки” (wrapper); кроме того, имеется класс Class, представляющий  типы классов и

интерфейсов. Такие классы обладают следующими преимуществами:

Полезные статические методы для конкретного типа получают естественное “место жительства”. Например, методы для преобразования строки в float являются статическими методами класса Float.

То же самое справедливо и для описательных методов и полей. В каждом из классов для примитивных числовых типов присутствуют константы MIN_VALUE и MAX_VALUE; с помощью объекта Class можно получить доступ к методам, описывающим супертипы класса.

Для значений, относящихся к примитивным типам, можно создавать объекты- оболочки. Затем эти объекты используются в любом контексте, где требуется ссылка на класс Object. По этой причине классы для примитивных типов называются классами-оболочками .

Иерархия типов для этих классов выглядит следующим образом:

Классы для short или byte отсутствуют, поскольку эти типы используются главным образом из соображений экономии памяти. Все арифметические  вычисления для short и byte производятся с выражениями типа int. Чтобы сохранить значение типа short или byte в объекте, пользуйтесь классом Integer. К сожалению, это также означает, что для типов byte и short отсутствуют константы MIN_VALUE и MAX_VALUE.

В данной главе показано, как пользоваться классами-оболочками. В первой части главы рассматриваются  объекты Class, которые представляют конкретные классы и интерфейсы.

Оставшаяся часть главы посвящена программированию  с использованием классов-

оболочек для примитивных типов.

Источник: Арнольд К., Гослинг Д. – Язык программирования Java (1997)

По теме:

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