代码之家  ›  专栏  ›  技术社区  ›  mrfr

StreamTokenizer在遇到斜杠时停止

  •  0
  • mrfr  · 技术社区  · 7 年前

    考虑这个程序,可以在教程点上找到(其中 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" 打印位置:

    Word: Hello

    Word: this

    Word: is

    Word: a

    Word: string

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

    字:你好

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

    1 回复  |  直到 7 年前
        1
  •  2
  •   Erik Pearson    7 年前

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

    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);
        }
    }
    

    通过google“StreamTokenizer正斜杠”找到此链接,并获得以下旧链接: http://www.dickbaldwin.com/java/Java061.htm