Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 可能是';展望未来';在StreamTokenizer中?_Java - Fatal编程技术网

Java 可能是';展望未来';在StreamTokenizer中?

Java 可能是';展望未来';在StreamTokenizer中?,java,Java,在解析器上工作,如果我检测到某个关键字,我想调用一个函数并将其发送给下一个令牌(我们可以假设所有输入都是正确的) 我在下面尝试的方法无效,因为我们无法取消对int的引用 我正在尝试的是: boolean eof = false; do{ int i = 0; int token = st.nextToken(); switch (token){ case Str

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

我在下面尝试的方法无效,因为我们无法取消对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----
<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");
}

您应该在不同的步骤中调用st.nextToken()。通话结束后,sval将可用

if (st.sval.equals("start")){
    System.out.println("---START----");
    st.nextToken();
    System.out.println(start(st.sval)); // look ahead
}

我很感激你的回答,但这并不是我想要的。启动start()调用的关键字必须是“start”。看起来您的示例在检测引号时启动了start()。不,我是说您需要用它替换
if(st.sval.equals(“start”))
中的代码,以修复编译错误。哦,对了!好的,我现在明白了。我为我的困惑道歉。你的建议很有效。干杯
if (st.sval.equals("start")){
    System.out.println("---START----");
    st.nextToken();
    System.out.println(start(st.sval)); // look ahead
}