Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用nextDouble()从包含混合数据的文件中读取InputMismatchException_Java - Fatal编程技术网

Java 使用nextDouble()从包含混合数据的文件中读取InputMismatchException

Java 使用nextDouble()从包含混合数据的文件中读取InputMismatchException,java,Java,以下是我正在为应用程序构建的面板的当前代码: import javax.swing.*; import java.util.*; import java.io.*; public class BookListPanel extends JPanel { private JList<String> bookList; private String[] list = new String[20]; private double[] priceList = new

以下是我正在为应用程序构建的面板的当前代码:

import javax.swing.*;
import java.util.*;
import java.io.*;

public class BookListPanel extends JPanel
{
    private JList<String> bookList;
    private String[] list = new String[20];
    private double[] priceList = new double[7];
    private File priceFile = new File("BookPrices.txt");
    int counter = 0;

    public BookListPanel() throws FileNotFoundException, InputMismatchException
    {
        Scanner fileReader = new Scanner(priceFile).useDelimiter(",\\s|$|\\n");
        while(fileReader.hasNext())
        {
            list[counter] = fileReader.next();
            priceList[counter] = fileReader.nextDouble();
            counter++;
        }

        bookList = new JList<>(list);
        bookList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        add(bookList);
    }
}
--------------------Configuration: <Default>--------------------
Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Scanner.java:864)
    at java.util.Scanner.next(Scanner.java:1485)
    at java.util.Scanner.nextDouble(Scanner.java:2413)
    at BookListPanel.<init>(BookListPanel.java:26)
    at BookstoreGUI.<init>(BookstoreGUI.java:39)
    at Bookstore.main(Bookstore.java:13)
当我尝试构建我的应用程序时,我在下一行收到一个InputMismatchException:

import javax.swing.*;
import java.util.*;
import java.io.*;

public class BookListPanel extends JPanel
{
    private JList<String> bookList;
    private String[] list = new String[20];
    private double[] priceList = new double[7];
    private File priceFile = new File("BookPrices.txt");
    int counter = 0;

    public BookListPanel() throws FileNotFoundException, InputMismatchException
    {
        Scanner fileReader = new Scanner(priceFile).useDelimiter(",\\s|$|\\n");
        while(fileReader.hasNext())
        {
            list[counter] = fileReader.next();
            priceList[counter] = fileReader.nextDouble();
            counter++;
        }

        bookList = new JList<>(list);
        bookList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        add(bookList);
    }
}
--------------------Configuration: <Default>--------------------
Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Scanner.java:864)
    at java.util.Scanner.next(Scanner.java:1485)
    at java.util.Scanner.nextDouble(Scanner.java:2413)
    at BookListPanel.<init>(BookListPanel.java:26)
    at BookstoreGUI.<init>(BookstoreGUI.java:39)
    at Bookstore.main(Bookstore.java:13)
我收到了以下信息:

0: I Did It Your Way
1: 11.95

2: The History of Scotland
3: 14.50

4: Learn Calculus in One Day
5: 29.95

6: Feel the Stress
7: 18.50

8: Great Poems
9: 12.95

10: Europe on a Shoestring
11: 10.95

12: The Life of Mozart
13: 14.50
14: 
这让我相信,即使我的分隔符列表中有换行符表达式,它仍然会在读取double时包含它(因为在读取数字后会添加一行额外的内容)。我想知道是否有我排除或遗漏的东西可以消除换行符,以便我可以将数字读入双数组,或者可能是我完全遗漏的东西


非常感谢您定义分隔符的方式不起作用。字符串中有空格(如
“我按你的方式做了”

这项工作:

useDelimiter("[,$\\v]\\s*")
说明:

  • 匹配下列任一项:
    $
    或垂直空白(行分隔符)
  • 然后匹配零个或多个空格(因为字符串和双精度字符由
    分隔),␠"

您是否已尝试打印出您试图使用
fileReader.nextDouble()
阅读的内容?我将尝试打印出我试图使用fileReader.nextDouble()阅读的内容谢谢您的输入,然后发回。同样不幸的是,我使用的是JCreator LE,它没有调试器。doh!我是否可以在
list[counter]=fileReader.nextLine();
priceList[counter]=fileReader.nextDouble()之间放置另一个
fileReader.nextLine()
?另外,只是用一个条件语句稍微不同地运行它,唯一的nextDouble read数字是文件中最后一个没有换行符的数字。对不起,这个问题让我完全糊涂了。如果我有一个新行作为分隔符,为什么从一个标记到另一个标记不忽略它?