Java StreamTokenizer クラス - セット 1

Java StreamTokenizer クラス - セット 1

Javaでは、 ストリームトークナイザー クラスが存在します java.io パッケージ 。入力ストリームを小さなチャンクに分割することで解析するために使用されます。 トークン これらのトークンにより処理が容易になります。トークンには、単語、数字、または特定の記号を指定できます。 Stream Tokenizer は、数字で囲まれた文字列とさまざまなコメント スタイルを認識できます。

StreamTokenizer クラスの機能:

StreamTokenizer クラスの主な機能を以下に示します。

  • 入力ストリームを記号、単語、数字などのトークンに分割します。
  • 行番号の追跡をサポートします。
  • 行末文字をトークンとして扱うことができます。
  • 単語トークンを自動的に小文字に変換することもできます。

StreamTokenizerクラスの宣言

StreamTokenizer クラスの宣言は次のとおりです。

public class StreamTokenizer extends Object 実装 Serializable

注記: Object を拡張し、Serializable を実装します。

StreamTokenizer クラスのコンストラクター

このクラスは 2 つのコンストラクターで構成されており、これらを使用すると、さまざまな方法でこのクラスのオブジェクトを作成できます。このクラスで使用できるコンストラクターは次のとおりです。

1. StreamTokenizer(InputStream です): このコンストラクターは 廃止された 。これは、バイト ストリームからトークナイザーを直接作成する古い方法です。

構文:

StreamTokenizer(InputStream)

注記: これは文字ではなくバイトで機能するため、お勧めできません。

2. StreamTokenizer(リーダーr): これは、テキストを適切に処理する文字ストリームを使用するトークナイザーを作成する最良の方法です。

構文:

StreamTokenizer(リーダー)

例:

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 メソッド

以下の表は、このクラスのメソッドを示しています。

方法 説明
コメント文字() 文字 ch が単一行のコメントを開始することを指定します。コメント文字から行末までのすべての文字は無視されます。
ライン() 入力ストリームの現在の行番号を返します。
toString() 現在のストリーム トークンの文字列表現と、それが発生する行番号を返します。

eolIsSignificant(ブール値フラグ)

行末文字を重要なトークンとして扱うかどうかを決定します。 true の場合、行末文字がトークンとして返されます。

普通のChar(int ch) 文字 ch を単語番号やコメント文字としてではなく、通常の文字として扱うことを指定します。
nextToken() 入力ストリームから次のトークンを解析し、その型を返します。
lowerCaseMode() 単語トークンを自動的に小文字に変換するかどうかを決定します。
普通のChar() 文字 ch を通常の文字として扱うことを指定します。
普通の文字() 低位から高位までの範囲内のすべての文字が通常の文字として扱われることを指定します。


ここでは、各方法について 1 つずつ詳しく説明します。


1. コメント文字(): このメソッドは文字を指定するために使用されます チャンネル これは単一行コメントで始まり、この文字から行末までのすべての文字は StreamTokenizer によって認識されません。

構文:

public void commentChar(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. line(): このメソッドは、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 (行末) 文字をトークン化する必要があるかどうかを確認するために使用されます。フラグが true の場合、各行末文字はトークンとして扱われ、トークン タイプ TT_EOL が割り当てられます。eol 文字は無視され、空白として扱われます。

構文:

public void eolIsSignificant(ブールフラグ)

  • パラメータ: このメソッドはブール値を受け取ります フラグ true の場合、行末文字はトークンとして扱われるか、空白として無視されます。
  • 戻り値の型: このメソッドは何も返しません。

例:

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(): このメソッドは、入力ストリームから次のトークンを読み取り、タイプを返します。トークンのタイプは、 タイプ 分野。 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 に、next token() メソッドの使用について通知します。


6. lowerCaseMod(): このメソッドはブール値を受け取ります フラグ 値を調べて、トークンを自動的に小文字に変換する必要があるかどうかを確認します。フラグが true の場合、トークンのすべての単語が小文字に変換されます。そうでない場合、トークンはそのまま設定され、変換されません。

構文:

public void lowerCaseMode(ブールフラグ)

  • パラメータ: ブール値が必要です フラグ 価値。 true の場合はすべてのトークンが小文字に変換され、false の場合は変換されません。
  • 戻り値の型: このメソッドは何も返しません。

例:

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 値を受け取ります チャンネル キャラクターとして扱うべきです。この方法を使用すると、 キャラクター ある 数字や空白などの特殊文字として。

構文:

public voidordinaryChar(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 を作成します。

Hello Geeks Thissss IssszzordinaryChar() について このメソッドはストリーム全体から 's' を削除します


8. 普通のChars(): このメソッドは、低位から高位までの範囲 (両端を含む) のすべての文字が通常の文字として扱われることを指定し、このメソッドを呼び出した後、文字は特殊文字として扱われなくなります。

構文:

public voidordinaryChars(int low int high)

  • パラメータ: このメソッドは 2 つの整数値を受け取ります 低い そして 高い ( 特殊文字に変換される文字の範囲。
  • 戻り値の型: このメソッドは何も返しません。

例:

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 を作成します。

こんにちは、Geeks これは、normalChars() についてです。


StreamTokenizer を使用してテキスト ファイルをトークン化する

StreamTokenizer クラスはテキスト ファイルのトークン化にも使用されます。ここでは Tokenizer クラス メソッドのメソッドを使用しています。

ステップ 1: まずテキストファイルを作成します 。TXT 拡張子は同じルートディレクトリにあります。ここでは、という名前で作成しました。 オタク.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  ;             }         }         }      }      

出力:

出力例


フォルダー構造:

フォルダー構造


次の記事  –  Java の Java.io.StreamTokenizer クラス |セット2

クイズの作成