StreamTokenizer用来分隔字符串。
可以获取输入流并将其分析为Token(标记)。StreamTokenizer的nextToken方法将读取下一个标记。
功能
将输入流分解成一组标记,
允许一次读一个。
分解过程由一张表和一些可以
设置成各种状态的标志来控制。
读取的每个字节被认为是
‟
\u0000
‟
-
„
\u00FF
‟
之间的字符。空格
(
„
\u0000
‟
-
„
\u0020
‟
)
,字母
(
„
A
‟
-
„
Z
‟
,
‟
a
‟
-
„
z
‟
,
‟
\u00A0
‟
-
„
\u00FF
‟
)
,数字,串
引号
(
„
,
“
)
,注释字符
(
„
/
‟
)
)。
做法:以一个
InputStream
作为源,创建一个
StreamTokenizer
对象,设
置参数
,
循环调用
nextToken
,返回流中下一个标记的类型,并处理相关的
值。
主要用于分析
Java
风格的输入;不是通用的标记分析器。
ttype
域:
nextToken
后刚读取的标记类型。六种情况:
单字符标记:表示该字符(转换成整数)
引号串标记:引号符
(String
类型域
sval
存储了串内容
)
TT_WORD(-3)
:单词。
String
类型域
sval
存储了该单词。
TT_NUMBER(-2)
:数。
double
类型域
nval
保存该数值。只能识别十进制浮
点数。
( ? 3.4e79,0xffff )
TT_EOL(
„
\n
‟
)
:行结束。
TT_EOF(-1)
:文件结束。
功能
将输入流分解成一组标记,
允许一次读一个。
分解过程由一张表和一些可以
设置成各种状态的标志来控制。
读取的每个字节被认为是
‟
\u0000
‟
-
„
\u00FF
‟
之间的字符。空格
(
„
\u0000
‟
-
„
\u0020
‟
)
,字母
(
„
A
‟
-
„
Z
‟
,
‟
a
‟
-
„
z
‟
,
‟
\u00A0
‟
-
„
\u00FF
‟
)
,数字,串
引号
(
„
,
“
)
,注释字符
(
„
/
‟
)
)。
做法:以一个
InputStream
作为源,创建一个
StreamTokenizer
对象,设
置参数
,
循环调用
nextToken
,返回流中下一个标记的类型,并处理相关的
值。
主要用于分析
Java
风格的输入;不是通用的标记分析器。
ttype
域:
nextToken
后刚读取的标记类型。六种情况:
单字符标记:表示该字符(转换成整数)
引号串标记:引号符
(String
类型域
sval
存储了串内容
)
TT_WORD(-3)
:单词。
String
类型域
sval
存储了该单词。
TT_NUMBER(-2)
:数。
double
类型域
nval
保存该数值。只能识别十进制浮
点数。
( ? 3.4e79,0xffff )
TT_EOL(
„
\n
‟
)
:行结束。
TT_EOF(-1)
:文件结束。
功能1、 将输入流分解成一组标记,允许一次读一个。分解过程由一张表和一些可以设置成各种状态的标志来控制。
2、读取的每个字节被认为是‟\u0000‟-„\u00FF‟之间的字符。空格(„\u0000‟-„\u0020‟),字母(„A‟-„Z‟,‟a‟-„z‟,‟\u00A0‟-„\u00FF‟),数字,串引号(„,“),注释字符(„/‟))。
3、做法:以一个InputStream作为源,创建一个StreamTokenizer对象,设置参数,循环调用nextToken,返回流中下一个标记的类型,并处理相关的值。
4、主要用于分析Java风格的输入;不是通用的标记分析器。 ttype域:nextToken后刚读取的标记类型。六种情况:
- 单字符标记:表示该字符(转换成整数)
- 引号串标记:引号符(String类型域sval存储了串内容)
- TT_WORD(-3):单词。String类型域sval存储了该单词。
- TT_NUMBER(-2):数。double类型域nval保存该数值。只能识别十进制浮点数。( ? 3.4e79,0xffff )
- TT_EOL(„\n‟):行结束。
- TT_EOF(-1):文件结束。
StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
st.ordinaryChar('\"');
st.ordinaryChar('/')
//TT_EOF指示已读到流末尾的常量。
while (st.nextToken() != StreamTokenizer.TT_EOF) {
//在调用 nextToken 方法之后,ttype字段将包含刚读取的标记的类型
switch (st.ttype) {
//TT_EOL指示已读到行末尾的常量。
case StreamTokenizer.TT_EOL:
break;
//TT_NUMBER指示已读到一个数字标记的常量
case StreamTokenizer.TT_NUMBER:
//如果当前标记是一个数字,nval字段将包含该数字的值
s = String.valueOf((st.nval));
System.out.println(s);
numberSum += s.length();
break;
//TT_WORD指示已读到一个文字标记的常量
case StreamTokenizer.TT_WORD:
//如果当前标记是一个文字标记,sval字段包含一个给出该文字标记的字符的字符串
s = st.sval;
wordSum += s.length();
break;
default:
public static void main(String[] args) throws IOException
{
StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
//PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
int a, b;
while(in.nextToken() != StreamTokenizer.TT_EOF)
{
a = (int)in.nval;
in.nextToken();
b = (int)in.nval;
//out.println(a + b);
System.out.println("a + b = "+(a+b));
}
out.flush();
}
}