Java StreamTokenizer Class - Комплект 1

Java StreamTokenizer Class - Комплект 1

В Java StreamTokenizer клас присъства в пакет java.io . Използва се за анализиране на входен поток чрез разделянето му на малки парчета, известни като токени тези токени улесняват обработката. Токенът може да бъде дума, число или всеки специфичен символ. Stream Tokenizer може да разпознава цитирани числа и различни стилове на коментари.

Характеристики на класа StreamTokenizer:

Основните характеристики на класа StreamTokenizer са изброени по-долу:

  • Той разделя входните потоци на токени като символи, думи и числа.
  • Поддържа номера на редове за проследяване.
  • Може да третира символите в края на реда като токени.
  • Той може също автоматично да преобразува токените на думи в малки букви.

Декларация на клас StreamTokenizer

Декларацията на класа StreamTokenizer е:

публичен клас StreamTokenizer разширява Object implements Serializable

Забележка: Той разширява Object и внедрява Serializable.

Конструктори на класа StreamTokenizer

Този клас се състои от два конструктора, с помощта на които можем да създаваме обекти от този клас по различни начини. Следните са наличните конструктори в този клас:

1. StreamTokenizer (InputStream е): Този конструктор е отхвърлено . Това е по-стар начин за създаване на токенизатор директно от байтов поток.

Синтаксис:

StreamTokenizer (InputStream е)

Забележка: Това не се препоръчва, защото работи с байтове, а не със знаци.

2. StreamTokenizer (Reader r): Това е най-добрият начин за създаване на токенизатор, той използва поток от знаци, който обработва правилно текста.

Синтаксис:

StreamTokenizer (Четец r)

Пример:

Java
   // Demonstrating the working    // of StreamTokenizer(Reader r)    import     java.io.*  ;   public     class   Geeks     {          public     static     void     main  (  String  []     args  )     throws     IOException     {          Reader     r     =     new     StringReader  (  'Hello 123'  );      StreamTokenizer     t     =     new     StreamTokenizer  (  r  );             int     token  ;      while     ((  token     =     t  .  nextToken  ())     !=     StreamTokenizer  .  TT_EOF  )     {      if     (  token     ==     StreamTokenizer  .  TT_WORD  )     {      System  .  out  .  println  (  'Word: '     +     t  .  sval  );      }     else     if     (  token     ==     StreamTokenizer  .  TT_NUMBER  )     {      System  .  out  .  println  (  'Number: '     +     t  .  nval  );      }      }      }   }   

Изход
Word: Hello Number: 123.0  


Методи на Java StreamTokenizer

Таблицата по-долу демонстрира методите на този клас.

Метод Описание
commentChar() Указва, че символът ch започва едноредов коментар. Всички знаци от знака за коментар до края на реда се игнорират.
линия() Връща номера на текущия ред на входния поток.
toString() Връща низово представяне на текущия токен на потока и номера на реда, който се появява.

eolIsSignificant(булев флаг)

Определя дали знаците в края на реда се третират като значими токени. Ако истински знаци в края на реда се връщат като токени.

обикновен знак (int ch) Указва, че знакът ch се третира като обикновен знак, а не като номер на дума или знак за коментар.
nextToken() Анализира следващия токен от входния поток и връща неговия тип.
smallCaseMode() Определя дали токените на думи се преобразуват автоматично в малки букви.
обикновен Char() Указва, че символът ch се третира като обикновен символ.
обикновени знаци () Указва, че всички знаци в диапазона от ниски към високи се третират като обикновени знаци.


Сега ще обсъдим подробно всеки метод един по един:


1. commentChar(): Този метод се използва за указване на знака гл който започва с коментар на един ред и всички знаци от този знак до края на реда не се разпознават от StreamTokenizer.

Синтаксис:

обществен невалиден коментар Char(int ch)

  • Параметър: Този метод приема една цяло число гл след това всички знаци се игнорират
  • Тип връщане: Този метод не връща нищо.

Пример:

Java
   // Demonstrating the working of commentChar() method   import     java.io.*  ;   public     class   Geeks     {      public     static     void     main  (  String  []     args  )     throws     IOException     {      FileReader     reader     =     new     FileReader  (  'ABC.txt'  );      BufferedReader     bufferread     =     new     BufferedReader  (  reader  );      StreamTokenizer     token     =     new     StreamTokenizer  (  bufferread  );      // Use of commentChar() method      token  .  commentChar  (  'a'  );         int     t  ;      while     ((  t     =     token  .  nextToken  ())     !=     StreamTokenizer  .  TT_EOF  )     {      switch     (  t  )     {      case     StreamTokenizer  .  TT_NUMBER  :      System  .  out  .  println  (  'Number : '     +     token  .  nval  );      break  ;      case     StreamTokenizer  .  TT_WORD  :      System  .  out  .  println  (  'Word : '     +     token  .  sval  );      break  ;      }      }      }   }   

Изход:

 Word : Programmers   
Number : 1.0
Number : 2.0
Number : 3.0
Word : Geeks
Word : Hello
Word : a
Word : Program
Word : is
Word : explained
Word : here
Word : my
Word : friends.

Забележка: Тази програма няма да работи успешно, защото файлът „ABC.txt“ не съществува. Ако искаме да тестваме кода в системата, просто трябва да създадем файл с име ABC.txt.

Създайте файл ABC.txt със следното съдържание, което е посочено по-долу:

Програмисти 1 2 3 Отрепки Здравейте, една програма е обяснена тук приятели мои.


2. ред(): Този метод връща номера на текущия ред, който се обработва от StreamTokenizer. Този метод е много полезен, когато искаме да проверим как работи обработката, отстраняване на грешки в програмата и можем също така да проследим номерата на редовете по време на токенизиране.

Синтаксис:

public int linen()

  • Параметър: Този метод не приема никакъв параметър.
  • Тип връщане: Този метод връща int стойност номера на реда на текущия входен поток.

Пример:

Java
   // Demonstrating the use of lineno() method   import     java.io.*  ;   public     class   Geeks   {      public     static     void     main  (  String  []     args  )     throws     InterruptedException           FileNotFoundException       IOException      {      FileReader     reader     =     new     FileReader  (  'ABC.txt'  );      BufferedReader     bufferread     =     new     BufferedReader  (  reader  );      StreamTokenizer     token     =     new     StreamTokenizer  (  bufferread  );          token  .  eolIsSignificant  (  true  );      // Use of lineno() method       // to get current line no.      System  .  out  .  println  (  'Line Number:'     +     token  .  lineno  ());      token  .  commentChar  (  'a'  );      int     t  ;      while     ((  t     =     token  .  nextToken  ())     !=     StreamTokenizer  .  TT_EOF  )      {      switch     (  t  )      {      case     StreamTokenizer  .  TT_EOL  :      System  .  out  .  println  (  ''  );      System  .  out  .  println  (  'Line No. : '     +     token  .  lineno  ());      break  ;      case     StreamTokenizer  .  TT_NUMBER  :      System  .  out  .  println  (  'Number : '     +     token  .  nval  );      break  ;      case     StreamTokenizer  .  TT_WORD  :      System  .  out  .  println  (  'Word : '     +     token  .  sval  );      break  ;      }      }      }   }   

Изход:

 Line Number:1   
Word : Progr

Line No. : 2
Number : 1.0

Line No. : 3
Number : 2.0

Line No. : 4
Number : 3.0

Line No. : 5
Word : Geeks

Line No. : 6
Word : Hello

Line No. : 7
Word : This
Word : is


3. toString(): Този метод връща низ, който представлява текущия токен на потока със стойността на токена и номера на реда, който използва в момента.

Синтаксис:

публичен String toString()

  • Параметър: Този метод не приема никакъв параметър.
  • Тип връщане: Този метод връща низова стойност, представляваща текущия токен на потока с номера на реда.

Пример:

Java
   // Demonstrating the use of toString() method   import     java.io.*  ;   public     class   Geeks     {      public     static     void     main  (  String  []     args  )     throws     IOException     {      FileReader     reader     =     new     FileReader  (  'ABC.txt'  );      BufferedReader     bufferread     =     new     BufferedReader  (  reader  );      StreamTokenizer     token     =     new     StreamTokenizer  (  bufferread  );      int     t  ;      while     ((  t     =     token  .  nextToken  ())     !=     StreamTokenizer  .  TT_EOF  )     {      switch     (  t  )     {      case     StreamTokenizer  .  TT_NUMBER  :      System  .  out  .  println  (  'Number : '     +     token  .  nval  );      break  ;      case     StreamTokenizer  .  TT_WORD  :      System  .  out  .  println  (  'Word : '     +     token  .  toString  ());         break  ;      }      }      }   }   

Изход:

 Word : Token[Programmers] line 1   
Number : 1.0
Number : 2.0
Number : 3.0
Word : Token[Geeks] line 5
Word : Token[Hello] line 6
Word : Token[a] line 7
Word : Token[Program] line 7
Word : Token[is] line 7
Word : Token[explained] line 7
Word : Token[here] line 7
Word : Token[my] line 7
Word : Token[friends.] line 7


4. eolIsSignificant(): Този метод не връща нищо, но се използва за проверка дали символът EOL (край на реда) трябва да бъде токенизиран. Ако флагът е верен, тогава всеки символ в края на реда се третира като токен и му се присвоява тип токен TT_EOL, символът eol се игнорира и се третира като интервал.

Синтаксис:

public void eolIsSignificant(булев флаг)

  • Параметър: Този метод приема булево значение знаме ако е вярно, тогава знакът за край на реда се третира като токен или се игнорира като интервал.
  • Тип връщане: Този метод не връща нищо.

Пример:

Java
   // Demonstrating the use of eolIsSignificant() method   import     java.io.*  ;   public     class   Geeks   {      public     static     void     main  (  String  []     args  )     throws     InterruptedException        FileNotFoundException       IOException      {      FileReader     reader     =     new     FileReader  (  'ABC.txt'  );      BufferedReader     bufferread     =     new     BufferedReader  (  reader  );      StreamTokenizer     token     =     new     StreamTokenizer  (  bufferread  );      boolean     arg     =     true  ;      // Use of eolIsSignificant() method      token  .  eolIsSignificant  (  arg  );      // Here the 'arg' is set true so EOL is treated as a token      int     t  ;      while     ((  t     =     token  .  nextToken  ())     !=     StreamTokenizer  .  TT_EOF  )      {      switch     (  t  )      {      case     StreamTokenizer  .  TT_EOL  :      System  .  out  .  println  (  'End of Line encountered.'  );      break  ;      case     StreamTokenizer  .  TT_NUMBER  :      System  .  out  .  println  (  'Number : '     +     token  .  nval  );      break  ;      case     StreamTokenizer  .  TT_WORD  :      System  .  out  .  println  (  'Word : '     +     token  .  sval  );      break  ;      }      }      }   }   

Изход:

 Number : 1.0   
End of Line encountered.
Word : Geeks
End of Line encountered.
Number : 2.0
End of Line encountered.
Word : For
End of Line encountered.
Number : 3.0
End of Line encountered.
Word : Geeks

Забележка: Тази програма няма да работи успешно, защото файлът „ABC.txt“ не съществува. Ако искаме да тестваме кода в системата, просто трябва да създадем файл с име ABC.txt.

Създайте файл ABC.txxt със следното съдържание, което е посочено по-долу:

1 маниаци 2 за 3 маниаци


5. nextToken(): Този метод чете следващия токен от входния поток и връща типа. Типът на токена се съхранява в ttype поле. Той връща типа като цяло число, което може да бъде TT_WORD TT_NUMBER и TT_EOL и т.н.

Синтаксис:

public int nextToken()

  • Параметър: Този метод не приема никакъв параметър.
  • Тип връщане: Този метод връща вътр стойност на типа токен.

Пример:

Java
   // Demonstrating the use of nextToken() method   import     java.io.*  ;   public     class   Geeks   {      public     static     void     main  (  String  []     args  )     throws     InterruptedException        FileNotFoundException       IOException      {      FileReader     reader     =     new     FileReader  (  'ABC.txt'  );      BufferedReader     bufferread     =     new     BufferedReader  (  reader  );      StreamTokenizer     token     =     new     StreamTokenizer  (  bufferread  );      // Use of nextToken() method to parse Next Token from the Input Stream      int     t     =     token  .  nextToken  ();      while     ((  t     =     token  .  nextToken  ())     !=     StreamTokenizer  .  TT_EOF  )      {      switch     (  t  )      {      case     StreamTokenizer  .  TT_NUMBER  :      System  .  out  .  println  (  'Number : '     +     token  .  nval  );      break  ;      case     StreamTokenizer  .  TT_WORD  :      System  .  out  .  println  (  'Word : '     +     token  .  sval  );      break  ;      }      }      }   }   

Изход:

 Word : This   
Word : program
Word : tells
Number : 2.0
Word : about
Word : use
Word : of
Number : 3.0
Word : next
Word : token
Word : method

Забележка: Тази програма няма да работи успешно, защото файлът „ABC.txt“ не съществува. Ако искаме да тестваме кода в системата, просто трябва да създадем файл с име ABC.txt.

Създайте файл ABC.txt със следното съдържание, което е посочено по-долу:

1 Тази програма разказва 2 за използването на 3 метода next token().


6. lowerCaseMod(): Този метод приема булево значение знаме стойност и проверява дали токенът трябва автоматично да се преобразува в малки букви. Ако флагът е верен, тогава всички думи на токена се преобразуват в малки букви или в противен случай токените се задават така, както са и не искат да ги преобразуват.

Синтаксис:

public void lowerCaseMode(булев флаг)

  • Параметър: Изисква се булево значение знаме стойност. Ако е вярно, тогава всички токени се преобразуват в малки букви и ако е невярно, тогава няма да бъдат преобразувани.
  • Тип връщане: Този метод не връща нищо.

Пример:

Java
   // Demonstrating the use of lowerCaseMode() method   import     java.io.*  ;   public     class   NewClass   {      public     static     void     main  (  String  []     args  )     throws     InterruptedException        FileNotFoundException       IOException      {      FileReader     reader     =     new     FileReader  (  'ABC.txt'  );      BufferedReader     bufferread     =     new     BufferedReader  (  reader  );      StreamTokenizer     token     =     new     StreamTokenizer  (  bufferread  );      // Use of lowerCaseMode() method to      //Here the we have set the Lower Case Mode ON          boolean     arg     =     true  ;      token  .  lowerCaseMode  (  arg  );      int     t  ;      while     ((  t     =     token  .  nextToken  ())     !=     StreamTokenizer  .  TT_EOF  )      {      switch     (  t  )      {      case     StreamTokenizer  .  TT_NUMBER  :      System  .  out  .  println  (  'Number : '     +     token  .  nval  );      break  ;      case     StreamTokenizer  .  TT_WORD  :      System  .  out  .  println  (  'Word : '     +     token  .  sval  );      break  ;      }      }      }   }   

Изход:

 Word : hello   
Word : geeks
Word : this
Word : is
Word : about
Word : lowercasemode

Забележка: Тази програма няма да работи успешно, защото файлът „ABC.txt“ не съществува. Ако искаме да тестваме кода в системата, просто трябва да създадем файл с име ABC.txt.

Създайте файл ABC.txt със следното съдържание, което е посочено по-долу:

Здравейте маниаци, става въпрос за LowerCaseMode()


7. обикновен Char(): Този метод приема int стойност гл трябва да се третира като характер. С помощта на този метод можем да лекуваме a характер а като специален знак като числова дума или интервал.

Синтаксис:

public void normalChar(int ch)

  • Параметър: Този метод отнема единичен int гл стойност, която ще се третира като знак.
  • Тип връщане: Този метод не връща нищо.

Пример:

Java
   // Demonstrating the use of ordinaryChar() method   import     java.io.*  ;   public     class   Geeks   {      public     static     void     main  (  String  []     args  )     throws     InterruptedException        FileNotFoundException       IOException      {      FileReader     reader     =     new     FileReader  (  'ABC.txt'  );      BufferedReader     bufferread     =     new     BufferedReader  (  reader  );      StreamTokenizer     token     =     new     StreamTokenizer  (  bufferread  );      // Use of ordinaryChar() method       // Here we have taken 's' as an ordinary character      token  .  ordinaryChar  (  's'  );      int     t  ;      while     ((  t     =     token  .  nextToken  ())     !=     StreamTokenizer  .  TT_EOF  )      {      switch     (  t  )      {      case     StreamTokenizer  .  TT_NUMBER  :      System  .  out  .  println  (  'Number : '     +     token  .  nval  );      break  ;      case     StreamTokenizer  .  TT_WORD  :      System  .  out  .  println  (  'Word : '     +     token  .  sval  );      break  ;      }      }      }   }   

Изход:

 Word : Hello   
Word : Geek
Word : Thi
Word : I
Word : zz
Word : About
Word : ordinaryChar

Забележка: Тази програма няма да работи успешно, защото файлът „ABC.txt“ не съществува. Ако искаме да тестваме кода в системата, просто трябва да създадем файл с име ABC.txt.

Създайте файл ABC.txt със следното съдържание, което е посочено по-долу:

Здравейте маниаци Thissss Issszz Относно normalChar() Този метод премахва 's' от целия поток


8. обикновени знаци (): Този метод указва, че всички символи в диапазона от ниски до високи (включително) ще бъдат третирани като обикновени символи и след извикване на този метод знаците вече няма да бъдат третирани като специални символи.

Синтаксис:

public void normalChars(int low int high)

  • Параметър: Този метод приема две цели числа ниско и високо ( включително) диапазонът на знака, който се преобразува в специален знак.
  • Тип връщане: Този метод не връща нищо.

Пример:

Java
   // Demonstrating the use of ordinaryChars() method   import     java.io.*  ;   public     class   Geeks   {      public     static     void     main  (  String  []     args  )     throws     InterruptedException        FileNotFoundException       IOException      {      FileReader     reader     =     new     FileReader  (  'ABC.txt'  );      BufferedReader     bufferread     =     new     BufferedReader  (  reader  );      StreamTokenizer     token     =     new     StreamTokenizer  (  bufferread  );      // Use of ordinaryChars() method       // Here we have taken low = 'a' and high = 'c'       token  .  ordinaryChars  (  'a'    'c'  );      int     t  ;      while     ((  t     =     token  .  nextToken  ())     !=     StreamTokenizer  .  TT_EOF  )      {      switch     (  t  )      {      case     StreamTokenizer  .  TT_NUMBER  :      System  .  out  .  println  (  'Number : '     +     token  .  nval  );      break  ;      case     StreamTokenizer  .  TT_WORD  :      System  .  out  .  println  (  'Word : '     +     token  .  sval  );      break  ;      }      }      }   }   

Изход:

 Word : Hello   
Word : Geeks
Word : This
Word : is
Word : out
Word : ordin
Word : ryCh
Word : rs

Забележка: Тази програма няма да работи успешно, защото файлът „ABC.txt“ не съществува. Ако искаме да тестваме кода в системата, просто трябва да създадем файл с име ABC.txt.

Създайте файл ABC.txt със следното съдържание, което е посочено по-долу:

Здравейте маниаци, това е за обикновените знаци ()


Използване на StreamTokenizer за токенизиране на текстов файл

Класът StreamTokenizer също се използва за токенизиране на текстовия файл и тук използваме методите на методите на класа Tokenizer.

Стъпка 1: Първо създайте текстов файл с .txt разширение в същата основна директория. Тук го създадохме с името Geeks.txt .

Текстов файл



Стъпка 2: Сега създайте Java файл и напишете кода, за да токенизирате текстовите данни, налични в текстовия файл.

Geeks.java файл:

Java
   // Java program to Tokenized the text    // file data using StreamTokenizer methods   import     java.io.*  ;      public     class   Geeks   {         public     static     void     main  (  String  []     args  )     throws     InterruptedException           FileNotFoundException       IOException         {         FileReader     reader     =     new     FileReader  (  'Geeks.txt'  );         BufferedReader     bufferread     =     new     BufferedReader  (  reader  );         StreamTokenizer     token     =     new     StreamTokenizer  (  bufferread  );             // Use of ordinaryChar() method       // Here we have taken 's' as an ordinary character       token  .  ordinaryChar  (  's'  );             int     t  ;         while     ((  t     =     token  .  nextToken  ())     !=     StreamTokenizer  .  TT_EOF  )         {         switch     (  t  )         {         case     StreamTokenizer  .  TT_NUMBER  :         System  .  out  .  println  (  'Number : '     +     token  .  nval  );         break  ;         case     StreamTokenizer  .  TT_WORD  :         System  .  out  .  println  (  'Word : '     +     token  .  sval  );         break  ;             }         }         }      }      

Изход:

OutputExample


Структура на папката:

FolderStructure


Следваща статия  –  Java.io.StreamTokenizer клас в Java | Комплект 2

Създаване на тест