无法阅读Double with Scanner

时间:2014-10-27 20:41:58

标签: java io java.util.scanner

我有一个奇怪的问题:

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

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

1 个答案:

答案 0 :(得分:1)

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

如果你想在字符串中获得下一个Double。首先在扫描仪上拨打useDelimiter("")

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