我有一个奇怪的问题:
如果我传递了字符串“7 + 4”,我对nextDouble()的调用会抛出异常InputMismatchException。
这里是完整的代码:
char ch;
try {
ch = getChar();
}
catch(EOF e) //On détecte la fin de la chaine
{
return new Token(null);
}
//Si c'est un chiffre
if(Character.isDigit(ch))
{
pushback(ch);
//On récupère un nombre
Scanner sc = new Scanner(in);
Token t = new Token(TokenKind.Number, sc.nextDouble());
sc.close();
return t;
}
getChar方法:
private char getChar()
{
try
{
//On essaie de lire un charactère.
int tmp_char = in.read();
//Si le charctère n'est pas un caractère ASCII, on lève une exception.
if(Character.charCount(tmp_char) != 1) throw new IllegalCharacterException();
return Character.toChars(tmp_char)[0];
}
catch (IOException e) {throw new EOF();}
}
还有后推(char c)
private void pushback(char ch)
{
try
{
in.unread(ch);
}
catch (IOException e) {e.printStackTrace(); throw new RuntimeException("IOException");}
}
而in
是使用“7 + 4”字符串初始化的PushbackReader。
如果我在nextLine()
之前致电nextDouble()
,则会返回“4 + 7”。
我做错了什么?我实际上不明白......
答案 0 :(得分:1)
Okey所以我发布解决方案,如果其他任何人有问题。
如果你想在字符串中获得下一个Double。首先在扫描仪上拨打useDelimiter("")
。
编辑:不是解析Double而是关于Scanner和PushbackReader:他们似乎不能一起工作......所以我的技巧在我的情况下没有用!