Назад
Вперед
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 с консолью".
Назад Вперед |