Java : StreamTokenizer (字句解析) - API使用例
StreamTokenizer (Java SE 19 & JDK 19) の使用例まとめです。
だいたいのメソッドを網羅済みです。
API仕様のおともにどうぞ。
概要
StreamTokenizerクラスを使うと、ホワイトスペースで区切られたトークン(単語や数値、引用文字列) を解析して取得することができます。
比較的単純な構文であれば便利だと思います。
final var s = """
abcd 1234
"X Y Z"
""";
try (final var reader = new StringReader(s)) {
final var tokenizer = new StreamTokenizer(reader);
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // abcd
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_NUMBER); // true
System.out.println(tokenizer.nval); // 1234.0
System.out.println(tokenizer.nextToken() == '"'); // true
System.out.println(tokenizer.sval); // X Y Z
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_EOF); // true
}
フィールド
double nval
このメソッドの使用例は、nextToken() にまとめて記載しました。
そちらのAPI使用例をご参照ください。
String sval
このメソッドの使用例は、nextToken() にまとめて記載しました。
そちらのAPI使用例をご参照ください。
static final int TT_EOF
final var s = "abcd\nXYZ";
try (final var reader = new StringReader(s)) {
final var tokenizer = new StreamTokenizer(reader);
tokenizer.eolIsSignificant(true);
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // abcd
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_EOL); // true
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // XYZ
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_EOF); // true
}
static final int TT_EOL
このメソッドの使用例は、TT_EOF にまとめて記載しました。
そちらのAPI使用例をご参照ください。
static final int TT_NUMBER
このメソッドの使用例は、nextToken() にまとめて記載しました。
そちらのAPI使用例をご参照ください。
static final int TT_WORD
このメソッドの使用例は、nextToken() にまとめて記載しました。
そちらのAPI使用例をご参照ください。
int ttype
final var s = "abcd 1234 XYZ";
try (final var reader = new StringReader(s)) {
final var tokenizer = new StreamTokenizer(reader);
tokenizer.nextToken();
System.out.println(tokenizer.ttype == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // abcd
tokenizer.nextToken();
System.out.println(tokenizer.ttype == StreamTokenizer.TT_NUMBER); // true
System.out.println(tokenizer.nval); // 1234.0
tokenizer.nextToken();
System.out.println(tokenizer.ttype == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // XYZ
tokenizer.nextToken();
System.out.println(tokenizer.ttype == StreamTokenizer.TT_EOF); // true
}
コンストラクタ
StreamTokenizer (InputStream is)
非推奨です。
StreamTokenizer (Reader r)
final var s = "abcd XYZ";
try (final var reader = new StringReader(s)) {
final var tokenizer = new StreamTokenizer(reader);
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // abcd
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // XYZ
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_EOF); // true
}
メソッド
void commentChar (int ch)
final var s = """
abcd
# comment
XYZ
""";
try (final var reader = new StringReader(s)) {
final var tokenizer = new StreamTokenizer(reader);
tokenizer.commentChar('#');
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // abcd
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // XYZ
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_EOF); // true
}
void eolIsSignificant (boolean flag)
このメソッドの使用例は、TT_EOF にまとめて記載しました。
そちらのAPI使用例をご参照ください。
int lineno ()
final var s = """
abcd 1234
XYZ
""";
try (final var reader = new StringReader(s)) {
final var tokenizer = new StreamTokenizer(reader);
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // abcd
System.out.println(tokenizer.lineno()); // 1
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_NUMBER); // true
System.out.println(tokenizer.nval); // 1234.0
System.out.println(tokenizer.lineno()); // 1
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // XYZ
System.out.println(tokenizer.lineno()); // 2
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_EOF); // true
System.out.println(tokenizer.lineno()); // 3
}
void lowerCaseMode (boolean fl)
final var s = "abcd XYZ";
try (final var reader = new StringReader(s)) {
final var tokenizer = new StreamTokenizer(reader);
tokenizer.lowerCaseMode(true);
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // abcd
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // xyz
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_EOF); // true
}
int nextToken ()
final var s = "abcd 1234 XYZ";
try (final var reader = new StringReader(s)) {
final var tokenizer = new StreamTokenizer(reader);
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // abcd
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_NUMBER); // true
System.out.println(tokenizer.nval); // 1234.0
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // XYZ
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_EOF); // true
}
void ordinaryChar (int ch)
final var s = "abcQxyz";
try (final var reader = new StringReader(s)) {
final var tokenizer = new StreamTokenizer(reader);
tokenizer.ordinaryChar('Q');
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // abc
System.out.println(tokenizer.nextToken() == 'Q'); // true
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // xyz
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_EOF); // true
}
try (final var reader = new StringReader(s)) {
final var tokenizer = new StreamTokenizer(reader);
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // abcQxyz
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_EOF); // true
}
void ordinaryChars (int low, int hi)
final var s = "AAAxBBByCCCzDDD";
try (final var reader = new StringReader(s)) {
final var tokenizer = new StreamTokenizer(reader);
tokenizer.ordinaryChars('x', 'z');
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // AAA
System.out.println(tokenizer.nextToken() == 'x'); // true
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // BBB
System.out.println(tokenizer.nextToken() == 'y'); // true
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // CCC
System.out.println(tokenizer.nextToken() == 'z'); // true
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // DDD
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_EOF); // true
}
void parseNumbers ()
final var s = "123";
try (final var reader = new StringReader(s)) {
final var tokenizer = new StreamTokenizer(reader);
tokenizer.resetSyntax();
System.out.println(tokenizer.nextToken() == '1'); // true
System.out.println(tokenizer.nextToken() == '2'); // true
System.out.println(tokenizer.nextToken() == '3'); // true
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_EOF); // true
}
try (final var reader = new StringReader(s)) {
final var tokenizer = new StreamTokenizer(reader);
tokenizer.resetSyntax();
tokenizer.parseNumbers();
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_NUMBER); // true
System.out.println(tokenizer.nval); // 123.0
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_EOF); // true
}
void pushBack ()
final var s = "abcd 1234";
try (final var reader = new StringReader(s)) {
final var tokenizer = new StreamTokenizer(reader);
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // abcd
tokenizer.pushBack();
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // abcd
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_NUMBER); // true
System.out.println(tokenizer.nval); // 1234.0
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_EOF); // true
}
void quoteChar (int ch)
final var s = """
abcd
=1234 XYZ=
""";
try (final var reader = new StringReader(s)) {
final var tokenizer = new StreamTokenizer(reader);
tokenizer.quoteChar('=');
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // abcd
System.out.println(tokenizer.nextToken() == '='); // true
System.out.println(tokenizer.sval); // 1234 XYZ
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_EOF); // true
}
void resetSyntax ()
このメソッドの使用例は、parseNumbers() にまとめて記載しました。
そちらのAPI使用例をご参照ください。
void slashSlashComments (boolean flag)
final var s = """
abcd // comment
XYZ
""";
try (final var reader = new StringReader(s)) {
final var tokenizer = new StreamTokenizer(reader);
tokenizer.ordinaryChar('/');
tokenizer.slashSlashComments(true);
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // abcd
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // XYZ
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_EOF); // true
}
try (final var reader = new StringReader(s)) {
final var tokenizer = new StreamTokenizer(reader);
tokenizer.ordinaryChar('/');
tokenizer.slashSlashComments(false);
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // abcd
System.out.println(tokenizer.nextToken() == '/'); // true
System.out.println(tokenizer.nextToken() == '/'); // true
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // comment
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // XYZ
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_EOF); // true
}
void slashStarComments (boolean flag)
final var s = "abcd /* comment */ XYZ";
try (final var reader = new StringReader(s)) {
final var tokenizer = new StreamTokenizer(reader);
tokenizer.ordinaryChar('/');
tokenizer.slashStarComments(true);
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // abcd
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // XYZ
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_EOF); // true
}
try (final var reader = new StringReader(s)) {
final var tokenizer = new StreamTokenizer(reader);
tokenizer.ordinaryChar('/');
tokenizer.slashStarComments(false);
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // abcd
System.out.println(tokenizer.nextToken() == '/'); // true
System.out.println(tokenizer.nextToken() == '*'); // true
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // comment
System.out.println(tokenizer.nextToken() == '*'); // true
System.out.println(tokenizer.nextToken() == '/'); // true
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // XYZ
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_EOF); // true
}
String toString ()
final var s = """
abcd
1234
""";
try (final var reader = new StringReader(s)) {
final var tokenizer = new StreamTokenizer(reader);
tokenizer.nextToken();
final var str1 = tokenizer.toString();
System.out.println(str1); // Token[abcd], line 1
tokenizer.nextToken();
final var str2 = tokenizer.toString();
System.out.println(str2); // Token[n=1234.0], line 2
tokenizer.nextToken();
final var str3 = tokenizer.toString();
System.out.println(str3); // Token[EOF], line 3
}
void whitespaceChars (int low, int hi)
final var s = "AAAxBBByCCCzDDD";
try (final var reader = new StringReader(s)) {
final var tokenizer = new StreamTokenizer(reader);
tokenizer.whitespaceChars('x', 'z');
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // AAA
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // BBB
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // CCC
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // DDD
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_EOF); // true
}
void wordChars (int low, int hi)
final var s = "abcdef";
try (final var reader = new StringReader(s)) {
final var tokenizer = new StreamTokenizer(reader);
tokenizer.resetSyntax();
tokenizer.wordChars('a', 'c');
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_WORD); // true
System.out.println(tokenizer.sval); // abc
System.out.println(tokenizer.nextToken() == 'd'); // true
System.out.println(tokenizer.nextToken() == 'e'); // true
System.out.println(tokenizer.nextToken() == 'f'); // true
System.out.println(tokenizer.nextToken() == StreamTokenizer.TT_EOF); // true
}