为什么Scanner.nextDouble为由","分隔的数字抛出一个InputMismatchException;或";"?

时间:2017-02-16 03:21:22

标签: java java.util.scanner inputmismatchexception

我正在尝试从文件中读取坐标。格式是起点,终点,多边形。这是一个例子:

1, 3
34, 19
0, 14; 6, 19; 9, 15; 7, 8; 1, 9
2, 6; 17, 6; 17, 1; 2, 1

我使用BufferedReader读取每一行并确认它正在工作。我正在尝试使用Scanner来解析数字的每一行作为双精度数,因此我使用Scanner的nextDouble方法,但是当我运行代码时它会抛出InputMismatchException第一次阅读。以下是这些行的逻辑:

文件行 - " 1,3"

代码: lineReader.nextDouble();

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

请参阅Scanner课程。它有一个例子,如何使用Scanner的分隔符。

  

扫描仪s =新扫描仪(输入).useDelimiter(“\\ s * fish \\ s *”);

以下是从文件中读取输入的示例。

public static void main(String[] args) {
    try (Scanner in = new Scanner(new File("D:/INPUT_OUTPUT/Data_Stack.txt"))) {

        // Adding delimiters.
        in.useDelimiter("\\s*,\\s*|\\s*\\n\\s*|\\s*;\\s*");

        // Reading files.
        while (in.hasNextDouble()) {
            System.out.println(in.nextDouble());
        }

    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

文件中的数据( Data_Stack.txt ) - :

1, 3
34, 19
0, 14; 6, 19; 9, 15; 7, 8; 1, 9
2, 6; 17, 6; 17, 1; 2, 1

<强>输出 - :

1.0
3.0
34.0
19.0
0.0
14.0
6.0
19.0
9.0
15.0
7.0
8.0
1.0
9.0
2.0
6.0
17.0
6.0
17.0
1.0
2.0
1.0

说明 - :Scanner我们可以看到 - :

  

扫描仪使用分隔符模式将其输入分解为标记,   默认情况下匹配空格。

所以我们必须添加所需的分隔符来读取我们的数据。必填分隔符为,\n;,已添加到代码行in.useDelimiter("\\s*,\\s*|\\s*\\n\\s*|\\s*;\\s*");中。
将分隔符添加到Scanner后正确读取数据。

答案 1 :(得分:-1)

Scanner.next()为'1,',类型为String。

尝试以下代码:

(setq mac-command-modifier 'meta)
(setq mac-escape-modifier nil)

然后你就可以理解了。