| |
ле ttype, а слова - в поле sval. По умолчанию
используется символ кавычек ‘”’, однако с помощью метода quoteChar вы можете
задать любой другой символ.
При необходимости в процессе разбора вы можете определить номер текущей
строки, вызвав для этого метод lineno:
public int lineno();
После вызова метода pushBack следующий вызов метода nextToken приведет к
тому, что в поле ttype будет записано текущее значение, а содержимое полей sval
и nval не изменится. Прототип метода pushBack приведен ниже:
public void pushBack();
Метод toString возвращает текстовую строку, представляющую текущий элемент,
выделенный из потока:
public String toString();
Приложение StreamToken
В приложении StreamToken мы демонстрируем использование класса
StreamTokenizer для разбора входного потока.
Вначале приложение запрашивает у пользователя строку для разбора, записывая
ее в файл. Затем этот файл открывается для чтения буферизованным потоком и
разбирается на составные элементы. Каждый такой элемент выводится в отдельной
строке, как это показано на рис. 2.6.
Рис. 2.6. Разбор входного потока в приложении StreamToken
Обратите внимание, что в процессе разбора значение 3.14 было воспринято как
числовое, а 3,14 - нет. Это потому, что при настройке разборщика мы указали,
что символ ‘.’ является обычным.
Исходный текст приложения
Исходный текст приложения StreamToken представлен в листинге 2.5.
Листинг 2.5. Файл StreamToken\StreamToken.java
// =========================================================
// Разбор входного потока при помощи класса
// StreamTokenizer
//
// (C) Фролов А.В, 1997
//
// E-mail: [email protected]
// WWW: http://www.glasnet.ru/~frolov
// или
// http://www.dials.ccas.ru/frolov
// =========================================================
import java.io.*;
// =========================================================
// Класс StreamToken
// Главный класс приложения
// =========================================================
public class StreamToken
{
// -------------------------------------------------------
// main
// Метод, получающий управление при запуске приложения
// -------------------------------------------------------
public static void main(String args[])
{
// Выходной поток
DataOutputStream OutStream;
// Входной поток
DataInputStream InStream;
// Массив для ввода строки с клавиатуры
byte bKbdInput[] = new byte[256];
// Введенная строка, которая будет записана в поток
String sOut;
try
{
// Выводим строку приглашения
System.out.println("Enter string to parse...");
// Читаем с клавиатуры строку для записи в файл
System.in.read(bKbdInput);
// Преобразуем введенные символы в строку типа String
sOut = new String(bKbdInput, 0);
// Создаем выходной буферизованный поток данных
OutStream = new DataOutputStream(
new BufferedOutputStream(
new FileOutputStream("output.txt")));
// Записываем строку sOut в выходной поток
OutStream.writeBytes(sOut);
// Закрываем выходной поток
OutStream.close();
// Создаем входной буферизованный поток данных
InStream = new DataInputStream(
new BufferedInputStream(
new FileInputStream("output.txt")));
// Создаем объект для разбора потока
TokenizerOfStream tos = new TokenizerOfStream();
// Выполняем разбор
tos.TokenizeIt(InStream);
// Закрываем входной поток
InStream.close();
System.out.println("Press to terminate...");
System.in.read(bKbdInput);
}
catch(Exception ioe)
{
System.out.println(ioe.toString());
}
}
}
// =========================================================
// Класс TokenizerOfStream
// Класс для разбора входного потока
// ============================================
|
|