我正在编写一个小型计算器,通过使用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
找到流标记器文档答案 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());
}