导致使用流标记器进行 EOL 的异常



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

因此,要么我尝试设置异常以忽略第一个异常之后的每个异常,要么尝试让流令牌器在捕获异常后移动到 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

你可以尝试这样的事情去行尾:

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

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

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

相关内容

  • 没有找到相关文章

最新更新