使用streamtokenizer导致EOL的例外?

时间:2013-09-15 15:01:04

标签: java exception stringtokenizer

我正在编写一个小型计算器,通过使用streamtokenizer以令牌形式输入。但是,在捕获异常时,我希望它忽略所有其他异常,或者移动到EOL。我不能打破,因为progream不是要崩溃,只是忽略该输入的所有后续异常。

因此,我尝试设置异常以忽略第一个之后的每个异常,或者我尝试在捕获异常后让streamtokenizer移动到EOL。

无论哪种方式,我都不知道这两个选项中的任何一个都有用。

public static void main(String[] args) throws customException {
    Calculator casio = new Calculator(new Stokenizer());
    while (true) {
        try {
            casio.statement();
        }
        } catch (customException error) {
            System.out.println(syntaxError.getMessage());
        } 
    }
}

可在http://docs.oracle.com/javase/7/docs/api/java/io/StreamTokenizer.html

找到流标记器文档

2 个答案:

答案 0 :(得分:1)

你可以尝试这样的东西到最后一行:

public void statement() throws IOException {
    int tt = StreamTokenizer.TT_EOF;
    try {
        while((tt = tokenizer.nextToken()) != StreamTokenizer.TT_EOF) {
            // ...
        }
    } catch (CustomException syntaxError) {
        System.out.println(syntaxError.getMessage());
        gotoEOL();
    }
}

private void gotoEOL() {
    try {
        while(tokenizer.nextToken() != StreamTokenizer.TT_EOL)
            ;
    } catch (IOException e) {
        e.printStackTrace();
    }
}

答案 1 :(得分:0)

使用A4Ls回答我做了一个小功能,并在每次投掷前添加它。可能不是最好的解决方案,但它确实有效。

private void gotoEOL() {
    while (!tokenizer.isEOL()) {
        tokenizer.nextToken();
       // System.out.println(tokenizer.getToken());
    }