无法与扫描仪
问题描述:
读双我有一个奇怪的问题:无法与扫描仪
,如果我传递的字符串“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();}
}
而推回(炭C)
private void pushback(char ch)
{
try
{
in.unread(ch);
}
catch (IOException e) {e.printStackTrace(); throw new RuntimeException("IOException");}
}
而且in
是与初始化的PushbackReader“ 7 + 4“字符串。
如果我在nextDouble()
之前致电nextLine()
,它将返回“4 + 7”。
我做错了什么?我其实不明白...
答
Okey所以我发布的解决方案,如果任何人有问题。
如果您想获取字符串中的下一个Double。请先在扫描仪上拨打useDelimiter("")
。
编辑:不是关于解析Double,而是关于Scanner和PushbackReader:他们似乎并不是一起工作......所以我的窍门在我的情况下不是有用的!
请阅读'double'值定义为字符串的方式[here](http://docs.oracle.com/javase/7/docs/api/java/lang/Double.html#valueOf%28java .lang.String%29)。 – hexafraction 2014-10-27 20:46:11