zoukankan      html  css  js  c++  java
  • 分解

    分解 是指将字节或字符序列分割为像单词这样的逻辑块的过程。Java 提供StreamTokenizer 类, 像下面这样操作:

     import java.io.*;

    public class token1 {

       public static void main(String args[]) {

            if (args.length != 1) {

                System.err.println("missing filename");

                System.exit(1);

            }

            try {

                FileReader fr = new FileReader(args[0]);

                BufferedReader br = new BufferedReader(fr);

                StreamTokenizer st = new StreamTokenizer(br);

                st.resetSyntax();

                st.wordChars('a', 'z');

                int tok;

                while ((tok = st.nextToken()) != StreamTokenizer.TT_EOF) {

                     if (tok == StreamTokenizer.TT_WORD)

                         ;// st.sval has token

                }

                br.close();

            } catch (IOException e) {

                System.err.println(e);

            }

       }

    }

    这个例子分解小写单词 (字母a-z)。如果你自己实现同等地功能,它可能像这样:

     import java.io.*;

    public class token2 {

       public static void main(String args[]) {

            if (args.length != 1) {

                System.err.println("missing filename");

                System.exit(1);

            }

            try {

                FileReader fr = new FileReader(args[0]);

                BufferedReader br = new BufferedReader(fr);

                int maxlen = 256;

                int currlen = 0;

                char wordbuf[] = new char[maxlen];

                int c;

                do {

                     c = br.read();

                     if (c >= 'a' && c <= 'z') {

                         if (currlen == maxlen) {

                             maxlen *= 1.5;

                             char xbuf[] = new char[maxlen];

                             System.arraycopy(wordbuf, 0, xbuf, 0, currlen);

                             wordbuf = xbuf;

                         }

                         wordbuf[currlen++] = (char) c;

                     } else if (currlen > 0) {

                         String s = new String(wordbuf, 0, currlen); // do something

                                                                         // with s

                         currlen = 0;

                     }

                } while (c != -1);

                br.close();

            } catch (IOException e) {

                System.err.println(e);

            }

       }

    }

    第二个程序比前一个运行快大约 20%,代价是写一些微妙的底层代码。

    StreamTokenizer 是一种混合类,它从字符流(例如 BufferedReader)读取, 但是同时以字节的形式操作,将所有的字符当作双字节(大于 0xff) ,即使它们是字母字符。 

     

  • 相关阅读:
    关于32位操作系统和64位操作系统对InstallShield打包的影响
    NEWS: Symantec宣布Wise Package Studio将终止
    InstallShield 2012新功能试用(2) 调用MsiGetProperty等MSI API发生变化
    Basic INFO 在命令行Build InstallShield安装包工程获得压缩安装包
    NEWS InstallShield 2012 Service Pack 1发布
    Basic INFO InstallShield Basic MSI工程中如何在SetupCompleteSuccess界面中启动Readme
    Basic INFO InstallShield的脚本编辑器中如何显示代码行号
    Basic INFO 关于在InstallShield制作的安装包界面中删除InstallShield文字的厂商回复
    Basic INFO InstallShield工程中如何让产品的快捷方式名称始终与产品名保持一致
    Basic INFO: 创建隐藏文件夹
  • 原文地址:https://www.cnblogs.com/borter/p/9434280.html
Copyright © 2011-2022 走看看