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数字是文件中最后一个没有换行符的数字。对不起,这个问题让我完全糊涂了。如果我有一个新行作为分隔符,为什么从一个标记到另一个标记不忽略它?