java - StreamTokenizer 在遇到斜杠时停止

标签 java tokenize

考虑这个在教程点上找到的程序(其中 br 是 BufferedReader 对象):

boolean eof = false;
// Parse incoming request
StreamTokenizer st = new StreamTokenizer(br);
do {
    int token = st.nextToken();

    switch (token) {
        case StreamTokenizer.TT_EOF:
            System.out.println("End of File encountered.");
            eof = true;
            break;

        case StreamTokenizer.TT_EOL:
            System.out.println("End of Line encountered.");
            break;

        case StreamTokenizer.TT_WORD:
            System.out.println("Word: " + st.sval);
            break;

        case StreamTokenizer.TT_NUMBER:
            System.out.println("Number: " + st.nval);
            break;

        default:
            System.out.println((char) token + " encountered.");

            if (token == '!') {
                eof = true;
            }
    }
    } while (!eof);

此代码片段适用于诸如“Hello this is a string”之类的字符串,它将打印出:

单词:你好

单词:这个

单词:是

单词:a

单词:字符串

但是如果我这样做:“Hello/this is a string”它只会打印出来

单词:你好

这是为什么,我该如何解决?

最佳答案

正斜杠/在 StreamTokenizer 类中不被视为普通字符。您可以使用普通Char 方法更改默认行为:

import java.io.*;

public class StreamTokenizerSO {
    public static void main(String[] args) throws IOException {
        String aString = "Hello /this is a string";
        Reader inputString = new StringReader(aString);
        BufferedReader br = new BufferedReader(inputString);

        boolean eof = false;
// Parse incoming request
        StreamTokenizer st = new StreamTokenizer(br);

        st.ordinaryChar('/');

        do {
            int token = st.nextToken();

            switch (token) {
                case StreamTokenizer.TT_EOF:
                    System.out.println("End of File encountered.");
                    eof = true;
                    break;

                case StreamTokenizer.TT_EOL:
                    System.out.println("End of Line encountered.");
                    break;

                case StreamTokenizer.TT_WORD:
                    System.out.println("Word: " + st.sval);
                    break;

                case StreamTokenizer.TT_NUMBER:
                    System.out.println("Number: " + st.nval);
                    break;

                default:
                    System.out.println((char) token + " encountered.");

                    if (token == '!') {
                        eof = true;
                    }
            }
        } while (!eof);
    }
}

通过谷歌搜索“StreamTokenizer 正斜杠”找到了这个并得到了这个旧链接:http://www.dickbaldwin.com/java/Java061.htm

关于java - StreamTokenizer 在遇到斜杠时停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48344730/

相关文章:

python - python tokenize 中的错误?

c - 从字符串中删除重复的单词时出现字符串标记化问题

java - 如何在 Lucene 3.4.0 中创建二元/三元索引?

java - 如何使用 Java 将自定义数据写入 TCP 数据包头选项字段?

java - HTML 页面比较 - 编辑距离

java - 如何打印一行中第 N 个单词的第 N 个字符?

java - 使用 java 创建词法分析器程序的想法

java - 如何仅使用命令行运行 Maven 创建的 jar 文件

Java MySQL ODBCPreparedStatement 切断查询

python - 无法标记数据框中的多个列