モジュール java.base
パッケージ java.io

クラスStreamTokenizer


  • public class StreamTokenizer
    extends Object
    StreamTokenizerクラスは、入力ストリームを引数に取り、それを「トークン」に構文解析し、一度に1つのトークンを読めるようにします。 構文解析処理は、さまざまな状態に設定可能ないくつかのフラグと1つの表によって制御されます。 ストリーム・トークナイザは、識別子、数値、引用文字列、および各種のコメント・スタイルを認識できます。

    入力ストリームから読み込まれる各バイトは、'\u0000'から'\u00FF'の範囲の文字とみなされます。 この文字値を使って、文字の5つの属性、つまり、空白英字数値引用文字列、およびコメント文字を検索します。 各文字は、これらの属性を持たないことも、複数持つこともできます。

    さらに、インスタンスには4つのフラグがあります。 これらのフラグが示す内容は次のとおりです。

    • 行末記号を、トークンとして返すか、またはトークンを区切るだけの空白文字として扱うかを示す。
    • Cスタイルのコメントを認識してスキップするかどうかを示す。
    • C++スタイルのコメントを認識してスキップするかどうかを示す。
    • 識別子の文字を小文字に変換するかどうかを示す。

    一般的なアプリケーションは、最初にこのクラスのインスタンスを生成してから、構文表を設定し、そのあとでループの各反復内でnextTokenメソッドを呼び出して、値TT_EOFが返されるまでこのループを繰り返します。

    導入されたバージョン:
    1.0
    関連項目:
    nextToken(), TT_EOF
    • フィールドのサマリー

      フィールド 
      修飾子と型 フィールド 説明
      double nval
      現在のトークンが数値の場合、このフィールドにはその数値が入ります。
      String sval
      現在のトークンがワード・トークンの場合、このフィールドには、ワード・トークンの文字を表す文字列が入ります。
      static int TT_EOF
      ストリームの終わりが読み込まれたことを示す定数です。
      static int TT_EOL
      行の終わりが読み込まれたことを示す定数です。
      static int TT_NUMBER
      数値トークンが読み込まれたことを示す定数です。
      static int TT_WORD
      ワード・トークンが読み込まれたことを示す定数です。
      int ttype
      nextTokenメソッドの呼出しのあと、このフィールドには読み込まれたばかりのトークンの型が入ります。
    • コンストラクタのサマリー

      コンストラクタ 
      コンストラクタ 説明
      StreamTokenizer​(InputStream is)
      非推奨。
      JDK Version 1.1以降、入力ストリームをトークン化するには、次のようにして入力ストリームを文字ストリームに変換することが推奨されています。
      StreamTokenizer​(Reader r)
      指定された文字ストリームを構文解析するトークナイザを作成します。
    • メソッドのサマリー

      すべてのメソッド インスタンス・メソッド 具象メソッド 
      修飾子と型 メソッド 説明
      void commentChar​(int ch)
      引数で指定された文字以降は、1行のコメント行であることを指定します。
      void eolIsSignificant​(boolean flag)
      行の終わりをトークンとして処理するかどうかを判別します。
      int lineno()
      現在の行番号を返します。
      void lowerCaseMode​(boolean fl)
      ワード・トークンを自動的に小文字にするかどうかを判別します。
      int nextToken()
      このトークナイザの入力ストリームの次のトークンを構文解析します。
      void ordinaryChar​(int ch)
      文字引数がこのトークナイザの「通常」文字であることを指定します。
      void ordinaryChars​(int low, int hi)
      low <= c <= highの範囲内のすべての文字cが、このトークナイザの「通常」文字であることを指定します。
      void parseNumbers()
      このトークナイザで数値を構文解析するように指定します。
      void pushBack()
      このトークナイザの次のnextTokenメソッド呼出しでttypeフィールドの現行値を返し、nvalまたはsvalフィールドの値は変更しないようにします。
      void quoteChar​(int ch)
      この文字に一致するペアで、このトークナイザの文字列定数を区切るように指定します。
      void resetSyntax()
      このトークナイザの構文表をリセットし、すべての文字を通常文字にします。
      void slashSlashComments​(boolean flag)
      トークナイザがC++スタイルのコメントを認識するかどうかを判別します。
      void slashStarComments​(boolean flag)
      トークナイザがCスタイルのコメントを認識するかどうかを判別します。
      String toString()
      現在のストリーム・トークンの文字列表現と、それが発生する行番号を返します。
      void whitespaceChars​(int low, int hi)
      low <= c <= highの範囲内のすべての文字cが空白文字であることを指定します。
      void wordChars​(int low, int hi)
      low <= c <= highの範囲内のすべての文字cがワード構成要素であることを指定します。
    • フィールドの詳細

      • ttype

        public int ttype
        nextTokenメソッドの呼出しのあと、このフィールドには読み込まれたばかりのトークンの型が入ります。 単一文字トークンの場合、その値は整数に変換された単一文字です。 引用文字列トークンの場合、その値は引用文字です。 それ以外の場合は、次の値のいずれかになります。
        • TT_WORDは、トークンがワードであることを示す。
        • TT_NUMBERは、トークンが数値であることを示す。
        • TT_EOLは、行の終わりに達したことを示す。 eolIsSignificantメソッドが引数trueで呼び出された場合、このフィールドはこの値のみを持つことができる。
        • TT_EOFは、入力ストリームの終わりに達したことを示す。

        このフィールドの初期値は -4です。

        関連項目:
        eolIsSignificant(boolean), nextToken(), quoteChar(int), TT_EOF, TT_EOL, TT_NUMBER, TT_WORD
      • TT_EOF

        public static final int TT_EOF
        ストリームの終わりが読み込まれたことを示す定数です。
        関連項目:
        定数フィールド値
      • TT_EOL

        public static final int TT_EOL
        行の終わりが読み込まれたことを示す定数です。
        関連項目:
        定数フィールド値
      • TT_NUMBER

        public static final int TT_NUMBER
        数値トークンが読み込まれたことを示す定数です。
        関連項目:
        定数フィールド値
      • TT_WORD

        public static final int TT_WORD
        ワード・トークンが読み込まれたことを示す定数です。
        関連項目:
        定数フィールド値
      • sval

        public String sval
        現在のトークンがワード・トークンの場合、このフィールドには、ワード・トークンの文字を表す文字列が入ります。 現在のトークンが引用文字列トークンの場合、このフィールドには、文字列の本体が入ります。

        ttypeフィールドの値がTT_WORDの場合、現在のトークンはワードです。 ttypeフィールドの値が引用文字の場合、現在のトークンは引用文字列トークンです。

        このフィールドの初期値はnullです。

        関連項目:
        quoteChar(int), TT_WORD, ttype
      • nval

        public double nval
        現在のトークンが数値の場合、このフィールドにはその数値が入ります。 ttypeフィールドの値がTT_NUMBERの場合、現在のトークンは数値です。

        このフィールドの初期値は0.0です。

        関連項目:
        TT_NUMBER, ttype
    • コンストラクタの詳細

      • StreamTokenizer

        @Deprecated
        public StreamTokenizer​(InputStream is)
        非推奨。
        JDK Version 1.1以降、入力ストリームをトークン化するには、次のようにして入力ストリームを文字ストリームに変換することが推奨されています。
           Reader r = new BufferedReader(new InputStreamReader(is));
           StreamTokenizer st = new StreamTokenizer(r);
         
        指定された入力ストリームを構文解析するストリーム・トークナイザを作成します。 ストリーム・トークナイザは、次のデフォルト状態に初期化されます。
        • バイト値('A'から'Z''a'から'z'、および'\u00A0'から'\u00FF')はすべて英字と見なす。
        • '\u0000'から'\u0020'のバイト値はすべて空白と見なす。
        • '/'はコメント文字。
        • 単一引用符'\''と二重引用符'"'は文字列の引用文字。
        • 数値は構文解析される。
        • 行末記号は、独立したトークンではなく空白文字として扱う。
        • CスタイルおよびC++スタイルのコメントは認識しない。
        パラメータ:
        is - 入力ストリーム。
        関連項目:
        BufferedReaderInputStreamReaderStreamTokenizer(java.io.Reader)
      • StreamTokenizer

        public StreamTokenizer​(Reader r)
        指定された文字ストリームを構文解析するトークナイザを作成します。
        パラメータ:
        r - 入力ストリームを提供するReaderオブジェクト。
        導入されたバージョン:
        1.1
    • メソッドの詳細

      • resetSyntax

        public void resetSyntax()
        このトークナイザの構文表をリセットし、すべての文字を「通常」文字にします。 通常文字の詳細は、ordinaryCharメソッドを参照してください。
        関連項目:
        ordinaryChar(int)
      • wordChars

        public void wordChars​(int low,
                              int hi)
        low <= c <= highの範囲内のすべての文字cがワード構成要素であることを指定します。 ワード・トークンは、ワード構成要素の後ろにゼロ個以上のワード構成要素または数値構成要素が続いたものです。
        パラメータ:
        low - 範囲の最小値。
        hi - 範囲の最大値。
      • whitespaceChars

        public void whitespaceChars​(int low,
                                    int hi)
        low <= c <= highの範囲内のすべての文字cが空白文字であることを指定します。 空白文字の機能は、入力ストリーム内でトークンを区切ることだけです。

        指定された範囲内の文字に対するその他の属性の設定はすべてクリアされます。

        パラメータ:
        low - 範囲の最小値。
        hi - 範囲の最大値。
      • ordinaryChars

        public void ordinaryChars​(int low,
                                  int hi)
        low <= c <= highの範囲内のすべての文字cが、このトークナイザの「通常」文字であることを指定します。 通常文字の詳細は、ordinaryCharメソッドを参照してください。
        パラメータ:
        low - 範囲の最小値。
        hi - 範囲の最大値。
        関連項目:
        ordinaryChar(int)
      • ordinaryChar

        public void ordinaryChar​(int ch)
        文字引数がこのトークナイザの「通常」文字であることを指定します。 コメント文字、ワード構成要素、文字列区切り文字、空白、または数値文字として文字が持つ特殊な意味は取り除かれます。 パーサーは、このような文字を検出すると、これを単一の文字トークンとして扱い、ttypeフィールドに文字の値を設定します。

        行末記号を「通常」文字にすると、StreamTokenizerが行をカウントする機能に干渉する可能性があります。 linenoメソッドが、行のカウントでそのような行末記号の存在を考慮しなくなることがあります。

        パラメータ:
        ch - 文字。
        関連項目:
        ttype
      • commentChar

        public void commentChar​(int ch)
        引数で指定された文字以降は、1行のコメント行であることを指定します。 ストリーム・トークナイザは、コメント文字から行の終わりまでの間の文字をすべて無視します。

        指定された文字に対するその他の属性の設定はすべてクリアされます。

        パラメータ:
        ch - 文字。
      • quoteChar

        public void quoteChar​(int ch)
        この文字に一致するペアで、このトークナイザの文字列定数を区切るように指定します。

        nextTokenメソッドが文字列定数を検出すると、ttypeフィールドには文字列区切り文字が設定され、svalフィールドには文字列の本体が設定されます。

        文字列の引用文字が検出されると、文字列の引用文字(これは含まない)の後ろから、同じ文字列の引用文字の次の出現場所、行末記号、またはファイルの終わり(これらは含まない)までのすべての文字で文字列が構成されていると認識されます。 "\n""\t"などの通常のエスケープ・シーケンスは認識され、文字列の構文解析時に単一文字に変換されます。

        指定された文字に対するその他の属性の設定はすべてクリアされます。

        パラメータ:
        ch - 文字。
        関連項目:
        nextToken(), sval, ttype
      • parseNumbers

        public void parseNumbers()
        このトークナイザで数値を構文解析するように指定します。 このトークナイザの構文表が変更されます。
              0 1 2 3 4 5 6 7 8 9 . -
         

        これら12個の各文字が「数値」属性を持つようになります。

        パーサーは、倍精度の浮動小数点数の形式のワード・トークンを検出すると、ttypeフィールドに値TT_NUMBERを設定し、トークンの数値をnvalフィールドに入れて、このトークンをワードではなく数値として扱います。

        関連項目:
        nval, TT_NUMBER, ttype
      • eolIsSignificant

        public void eolIsSignificant​(boolean flag)
        行の終わりをトークンとして処理するかどうかを判別します。 flag引数がtrueの場合、このトークナイザは行の終わりをトークンとして処理します。行の終わりが読み込まれると、nextTokenメソッドはTT_EOLを返し、ttypeフィールドにこの値を設定します。

        行は、復帰文字('\r')または改行文字('\n')で終わる文字シーケンスです。 また、直後に改行文字が続く復帰文字は、行末を表す単一のトークンとして扱われます。

        flagがfalseの場合、行末文字は空白として扱われ、その機能はトークンを区切るだけです。

        パラメータ:
        flag - trueは、行末文字が独立したトークンであることを示す。falseは、行末文字が空白であることを示す。
        関連項目:
        nextToken(), ttype, TT_EOL
      • slashStarComments

        public void slashStarComments​(boolean flag)
        トークナイザがCスタイルのコメントを認識するかどうかを判別します。 flag引数がtrueの場合、このストリーム・トークナイザはCスタイルのコメントを認識します。 /**/の間のテキストはすべて破棄されます。

        flag引数がfalseの場合、Cスタイルのコメントは特別には扱われません。

        パラメータ:
        flag - trueは、Cスタイルのコメントを認識して無視することを示す。
      • slashSlashComments

        public void slashSlashComments​(boolean flag)
        トークナイザがC++スタイルのコメントを認識するかどうかを判別します。 flag引数がtrueの場合、このストリーム・トークナイザはC++スタイルのコメントを認識します。 スラッシュ文字('/')が2つ続く場合、これは行の終わりまで続くコメントの始まりを意味します。

        flag引数がfalseの場合、C++スタイルのコメントは特別には扱われません。

        パラメータ:
        flag - trueは、C++スタイルのコメントを認識して無視することを示す。
      • lowerCaseMode

        public void lowerCaseMode​(boolean fl)
        ワード・トークンを自動的に小文字にするかどうかを判別します。 flag引数がtrueの場合、ワード・トークンが返されるたびにsvalフィールドの値が小文字にされます。ttypeフィールドが持つ値TT_WORDは、このトークナイザのnextTokenメソッドからのものです。

        flag引数がfalseの場合、svalフィールドは変更されません。

        パラメータ:
        fl - trueは、すべてのワード・トークンを小文字にすることを示す。
        関連項目:
        nextToken(), ttype, TT_WORD
      • nextToken

        public int nextToken()
                      throws IOException
        このトークナイザの入力ストリームの次のトークンを構文解析します。 次のトークンの型はttypeフィールドに返されます。 トークンに関する補足情報は、このトークナイザのnvalフィールドまたはsvalフィールドにあります。

        このクラスの一般的なクライアントは、まず最初に構文表を設定してからnextTokenを呼び出すループに入り、TT_EOFが返されるまでトークンを順次解析します。

        戻り値:
        ttypeフィールドの値。
        例外:
        IOException - 入出力エラーが発生した場合。
        関連項目:
        nval, sval, ttype
      • pushBack

        public void pushBack()
        このトークナイザの次のnextTokenメソッド呼出しでttypeフィールドの現行値を返し、nvalまたはsvalフィールドの値は変更しないようにします。
        関連項目:
        nextToken(), nval, sval, ttype
      • lineno

        public int lineno()
        現在の行番号を返します。
        戻り値:
        このストリーム・トークナイザの現在の行番号。
      • toString

        public String toString()
        現在のストリーム・トークンの文字列表現と、それが発生する行番号を返します。

        次の例を一般的なものと考えることはできますが、返される文字列は正確に指定されていません。

        Token['a'], line 10

        オーバーライド:
        toString 、クラス:  Object
        戻り値:
        トークンの文字列表現
        関連項目:
        nval, sval, ttype