快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

Stream Tokenizing(分解字符串)

从sun网站看到的Stream Tokenizing
In Tech Tips: June 23, 1998, an example of string tokenization was presented, using the class java.util.StringTokenizer.

There\\\'s also another way to do tokenization, using java.io.StreamTokenizer. StreamTokenizer operates on input streams rather than strings, and each byte in the input stream is regarded as a character in the range \\\'/u0000\\\' through \\\'/u00FF\\\'.

StreamTokenizer is lower level than StringTokenizer, but offers more control over the tokenization process. The class uses an internal table to control how tokens are parsed, and this syntax table can be modified to change the parsing rules. Here\\\'s an example of how StreamTokenizer works:


import java.io.*;
import java.util.*;
   
public class streamtoken {
  public static void main(String args[])
  {
    if (args.length == 0) {
      System.err.println("missing input filename");
      System.exit(1);
    }
   
    Hashtable wordlist = new Hashtable();
   
    try {
      FileReader fr = new FileReader(args[0]);
      BufferedReader br = new BufferedReader(fr);
   
      StreamTokenizer st = new StreamTokenizer(br);
      //StreamTokenizer st =
      //    new StreamTokenizer(new StringReader(
      //    "this is a test"));
      st.resetSyntax();
      st.wordChars(\\\'A\\\', \\\'Z\\\');
      st.wordChars(\\\'a\\\', \\\'z\\\');
      int type;
      Object dummy = new Object();
      while ((type = st.nextToken()) !=
        StreamTokenizer.TT_EOF) {
          if (type == StreamTokenizer.TT_WORD)
            wordlist.put(st.sval, dummy);
        }
        br.close();
      }
      catch (IOException e) {
        System.err.println(e);
      }
   
      Enumeration enum = wordlist.keys();
      while (enum.hasMoreElements())
        System.out.println(enum.nextElement());
   }
}

In this example, a StreamTokenizer is created on top of a FileReader / BufferedReader pair that represents a text file. Note that a StreamTokenizer can also be made to read from a String by using StringReader as illustrated in the commented-out code shown above (StringBufferInputStream also works, although this class has been deprecated).

The method resetSyntax is used to clear the internal syntax table, so that StreamTokenizer forgets any rules that it knows about parsing tokens. Then wordChars is used to declare that only upper and lower case letters should be considered to form words. That is, the only tokens that StreamTokenizer recognizes are sequences of upper and lower case letters.

nextToken is called repeatedly to retrieve words, and each resulting word is found in the public instance variable "st.sval". The words are inserted into a Hashtable, and at the end of processing the contents of the table are displayed, using an Enumeration as illustrated in Tech Tips: June 23, 1998. So the action of this program is to find all the unique words in a text file and display them.

StreamTokenizer also has special facilities for parsing numbers, quoted strings, and comments. It\\\'s a useful alternative to StringTokenizer, and is especially applicable if you are tokenizing input streams, or wish to exercise finer control over the tokenization process





返回类别: 教程
上一教程: 把一个普通应用程序变为win2000(NT)中的服务
下一教程: 成员变量和方式的override的详解

您可以阅读与"Stream Tokenizing(分解字符串)"相关的教程:
· JAVA经典实例-连接字符串
· 各种数字类型转变成字符串型--JAVA
· java中两个字符串“Equals”和“==”的区别
· java 面试中的一道编写一个截取字符串的函数!!!!
· JAVA经典实例--连接字符串
    微笑服务 优质保证 索取样品