Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

Библиотека :: Компьютеры и Программирование :: А.В. Фролов, Г.В. Фролов - Microsoft Visual J++
<<-[Весь Текст]
Страница: из 275
 <<-
 
TokenizerOfStream tos = new TokenizerOfStream();
   Вслед за этим мы вызываем метод TokenizeIt, определенный в классе 
TokenizerOfStream, передавая ему в качестве параметра ссылку на входной поток:
tos.TokenizeIt(InStream);
   Метод TokenizeIt выполняет разбор входного потока, отображая результаты 
разбора на консоли. После выполнения разбора входной поток закрывается методом 
close:
InStream.close();
   Самое интересное в нашем приложении связано, очевидно, с классом 
TokenizerOfStream, поэтому перейдем к его описанию.
   В этом классе определен только один метод TokenizeIt:
public void TokenizeIt(InputStream is)
{
  . . .
}
   Получая в качестве параметра ссылку на входной поток, он прежде всего 
создает для него разборщик класса StreamTokenizer:
StreamTokenizer stok;
stok = new StreamTokenizer(is);
   Настройка параметров разборщика очень проста и сводится к вызовам всего двух 
методов:
stok.slashSlashComments(true);
stok.ordinaryChar('.');
   Метод slashSlashComments включает режим распознавания комментариев в стиле 
языка программирования С++, а метод ordinaryChar объявляет символ ‘.’ обычным 
символом.
   После настройки запускается цикл разбора входного потока, причем условием 
завершения цикла является достижение конца этого потока:
while(stok.nextToken() != StreamTokenizer.TT_EOF)
{
  . . .
}
   В цикле анализируется содержимое поля ttype, которое зависит от типа 
элемента, обнаруженного во входном потоке:
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;
  }
  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);
  }
}
   На слова и численные значения мы реагируем очень просто - записываем их 
текстовое представление в рабочую переменную str типа String. При обнаружении 
конца строки в эту переменную записывается строка End of line. 
   Если же обнаружен обычный символ, мы сравниваем его с символом кавычки. При 
совпадении в переменную str записывается содержимое поля sval, в котором 
находятся слова, обнаруженные внутри кавычек. Если же обнаруженный символ не 
является символом кавычки, он преобразуется в строку и записывается в 
переменную str.
   В заключении метод выводит строку str в стандартный поток вывода, отображая 
на консоли выделенный элемент потока:
System.out.println(str);
   Класс StringTokenizer
   Рассказывая о классе StreamTokenizer, нельзя не упомянуть о другом классе с 
похожим названием и назначением, а именно о классе StringTokenizer.
   Определение этого класса достаточно компактно, поэтому мы приведем его 
полность
 
<<-[Весь Текст]
Страница: из 275
 <<-