| |
============
class TokenizerOfStream
{
public void TokenizeIt(InputStream is)
{
// Создаем разборщик потока
StreamTokenizer stok;
// Временная строка
String str;
try
{
// Создаем разборщик потока
stok = new StreamTokenizer(is);
// Задаем режим исключения комментариев,
// записанных в стиле С++ (два символа '/')
stok.slashSlashComments(true);
// Указываем , что символ '.' будет обычным символом
stok.ordinaryChar('.');
// Запускаем цикл разбора потока,
// который будет завершен при достижении
// конца потока
while(stok.nextToken() != StreamTokenizer.TT_EOF)
{
// Определяем тип выделенного элемента
switch(stok.ttype)
{
// Если это слово, записываем его во
// временную строку
case StreamTokenizer.TT_WORD:
{
str = new String("\nTT_WORD >" + stok.sval);
break;
}
// Если это число, преобразуем его
// в строку
case StreamTokenizer.TT_NUMBER:
{
str = "\nTT_NUMBER >" +
Double.toString(stok.nval);
break;
}
// Если найден конец строки,
// выводим строку End of line
case StreamTokenizer.TT_EOL:
{
str = new String("> End of line");
break;
}
// Выводим прочие символы
default:
{
if((char)stok.ttype == '"')
{
str = new String("\nTT_WORD >" + stok.sval);
}
else
str = "> " +
String.valueOf((char)stok.ttype);
}
// Выводим на консоль содержимое временной строки
System.out.println(str);
}
}
catch(Exception ioe)
{
System.out.println(ioe.toString());
}
}
}
Описание исходного текста приложения
После ввода строки с клавиатуры и записи ее в файл через поток наше
приложение создает входной буферизованный поток, как это показано ниже:
InStream = new DataInputStream(
new BufferedInputStream(
new FileInputStream("output.txt")));
Далее для этого потока создается разборщик, который оформлен в отдельном
классе TokenizerOfStream, определенном в нашем приложении
|
|