java - StreamTokenizer 中可能为 'look ahead' 吗?

标签 java

在解析器上工作,如果我检测到某个关键字,我想调用一个函数并向其发送下一个标记(我们可以假设所有输入都是正确的)。

我在下面尝试的方法不起作用,因为我们无法取消引用 int。

我正在尝试:

        boolean eof = false;
        do{
            int i = 0;
            int token = st.nextToken();
            switch (token){
                case StreamTokenizer.TT_EOF:
                    System.out.println("EOF");
                    eof = true;
                    break;
                case StreamTokenizer.TT_EOL:
                    System.out.println("EOL");
                    break;
                case StreamTokenizer.TT_WORD:
                    //System.out.println("Word: " + st.sval);
                    if (st.sval.equals("start")){
                        System.out.println("---START----");
                        System.out.println(start(st.nextToken().sval)); // look ahead
                    }
                    break;
                case StreamTokenizer.TT_NUMBER:
                    System.out.println("Number: " + st.nval);
                    break;
                case '\'':
                    System.out.println("Quoted Value is " + st.sval);
                    break;
                default:
                    System.out.println((char) token + " encountered.");
                    break;

            }
        } while (!eof);

    } catch (Exception ex){
        ex.printStackTrace();
    }
}

public static String start(String in){
    String out = "<start> " + in + " </start>";
    return out;
}

输入

start 'BEGIN HERE' 

期望的输出

----START----
<start> BEGIN HERE </start>

最佳答案

st.nextToken() 的调用返回一个 int,因此在 st.nextToken().sval 上出现编译错误。你想做这样的事情:

System.out.println("---START----");
st.nextToken();
System.out.println(start(st.sval));

当然,这只是假设 nextToken() 返回 ';这样做会更加稳健:

System.out.println("---START----");
if(st.nextToken() == '\'') {
   System.out.println(start(st.sval));
} else {
   // Handle error
   System.err.println("Expected 'string' after start");
}

关于java - StreamTokenizer 中可能为 'look ahead' 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23066341/

相关文章:

java - 将映射值(在 javascript 中创建)传递给 Action - struts2

java - 正则表达式提取 hive 在以下情况?

java - HttpServletRequest 不返回 null?

java - JMS 发送和接收同步

java - Oracle 存储过程上的 Spring SimpleJdbcCall : Closed Connection accessing BLOB output parameter

java - 从时间戳到日期格式 "Wed Jul 17 05:33:07 UTC 2013"

java - 尝试获取具有包名称的包片段时,IPackage 片段未打开

java - 继承隐藏方法

java - 我使用什么日志系统?

java - 我的 Java 分数计算器拒绝与我合作