2014-10-27 134 views
0

读双我有一个奇怪的问题:无法与扫描仪

,如果我传递的字符串“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”。

我做错了什么?我其实不明白...

+0

请阅读'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

回答

1

Okey所以我发布的解决方案,如果任何人有问题。

如果您想获取字符串中的下一个Double。请先在扫描仪上拨打useDelimiter("")

编辑:不是关于解析Double,而是关于Scanner和PushbackReader:他们似乎并不是一起工作......所以我的窍门在我的情况下不是有用的!