StreamTokenizer在输入中的用法

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)));
  //ordinaryChar方法指定字符参数在此标记生成器中是“普通”字符。
            st.ordinaryChar('\''); //指定单引号、双引号和注释符号是普通字符
            st.ordinaryChar('\"');
            st.ordinaryChar('/')

  //nextToken方法读取下一个Token.
  //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();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值