Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых
[Назад]

Библиотека примеров приложений Java

Оглавление
Выбор файлов
Простейший редактор текста
Копирование файлов UNICODE
Сохранение объекта Java в файле
Произвольные классы и файлы
Буферизация потоков
Разбор конфигура-
ционного файла

Работа с консолью
Работа с классом PrintWriter
Разбор строк класса String
Загрузка и просмотр изображений
Потоки в оперативной памяти
Конвейерные потоки
Комбинирование двух потоков
Комбинирование нескольких потоков
Поиск слова в текстовом файле
Произвольный доступ к файлу
Информация о файле
Работа с каталогами
Просмотр содержимого каталога
Просмотр каталога с фильтром
Панель для выбора каталога
Список системных свойств
Сохранение списка системных свойств
Контрольная сумма файла
Копирование, переименование, удаление файлов
Архивы ZIP
Создание архива ZIP
Распаковка архива ZIP
Обход дерева каталогов

Назад Вперед

7.10. Разбор строк класса String

В примере демонстрируется использование класса StringTokenizer для разбора текстовых строк, введеных с консоли.

Исходный текст примера

Архив проекта для Java WorkShop 2.0

Немного теории

Класс StringTokenizer похож по названию и назначению на класс StreamTokenizer, однако работает не с потоками, а с текстовыми строками. Вы можете использовать класс StringTokenizer для выделения элементов строк класса String.

В классе StringTokenizer предусмотрено три конструктора:

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

В качестве первого параметра конструкторам передается ссылка на разбираемую строку. Второй параметр delim, если он есть, задает разделители, с использованием которых в строке будут выделяться элементы. Параметр returnTokens определяет, надо ли возвращать обнаруженные разделители как элементы разбираемой строки.

Методы класса StringTokenizer перечислены ниже:

public String nextToken();
public String nextToken(String delim);
public int countTokenss();
public boolean hasMoreElements();
public boolean hasMoreTokenss();
public Object nextElement();

Для разбора строки приложение обычно создает цикл, вызывая в нем метод nextToken. Условием завершения цикла может быть либо возникновение исключения NoSuchElementException, либо возврат значения false методами hasMoreElements или hasMoreTokens.

Метод countTokens позволяет определить, сколько раз был вызван метод nextToken перед возникновением исключения NoSuchElementException.

Более подробное описание методов класса StringTokenizer вы найдете в документации JDK.

Описание примера

Консольное приложение, исходные тексты которого приведены в этом разделе, вводит в цикле текстовые строки и выделяет из них элементы:

* String parser

Enter string to parse ('quit' to exit): 
val = x*sin(2*y);

val 
=
x
*
sin
(
2
*
y
)
;
Enter string to parse ('quit' to exit):

В приложении мы создали список символов-разделителей, отделяющих элементы разбираемой строки.

Вся работа выполняется статическим методом main, определенным в главном классе приложения.

Строка s используется в качестве рабочей:

String s;

Строка szDelemiters составлена из символов-разделителей:

String szDelemiters = 
  "\"(),+-=<>?!@#$%^&*~'./\\"; 

Работа по разбору строки выполняется в цикле.

Прежде всего метод main вводит с клавиатуры исходную строку, вызывая для этого метод getKbdString, определенный в нашем приложении:

System.out.println(
  "Enter string to parse ('quit' to exit): ");
s = new String(getKbdString());

Если пользователь ввел строку quit, цикл прерывается:

if(s.equals("quit"))
  break;

Далее мы создаем разборщик строки класса StringTokenizer:

StringTokenizer st = 
  new StringTokenizer(s, szDelemiters, true);

Через первый параметр мы передали конструктору класса StringTokenizer ссылку на разбираемую строку, которая только что была введена с консоли.

Параметр szDelemiters задает список символов-разделителей.

Так как через третий параметр мы передаем конструктору значение true, символы-разделители будут выделяться в строке наряду с обычными элементами.

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

while(st.hasMoreTokens())
{
  System.out.println(st.nextToken());     
} 

Для проверки условия завершения цикла мы вызываем метод hasMoreTokens. Когда вся строка будет разобрана, он вернет значение false и цикл завершит свою работу.

Извлечение элементов строки выполняется методом nextToken. Эти элементы сразу выводтся на консоль.

Исходный текст метода getKbdString мы описали раньше в разделе "Работа приложения Java с консолью".


Назад Вперед

[Назад]