我正在尝试从文件读取数据并将其写入数组。我相信多个字符串变量是让我失望的原因。
我尝试使用scan.NextLine,但仍然无法正常工作。
public static void main (String[] args) throws IOException
{
File f = new File("inData.txt");
House[] list = new House[7];
Scanner scan = new Scanner(f);
int count = 0;
while (scan.hasNext())
{
list[count] = new House(scan.next(), scan.next(), scan.next(), scan.nextInt());
count++;
}
该文件来自名为“ inData.txt”的记事本文件。这是一张图片:该文件。 Notepad Picture
我收到的错误消息是“ java.util.InputMismatchException”。
这是我的House类代码。
public class House
{
private String houseID, town, zipCode;
private int price;
public House(String houseID, String town, String zipCode, int price)
{
this.houseID = houseID;
this.town = town;
this.zipCode = zipCode;
this.price = price;
}
答案 0 :(得分:2)
您的问题是Scanner()读取由空格分隔的值,并且您希望每行都解析为4个值。这将适用于输入文件的前四行,但是随后您会有两行在技术上具有5个值,因为这些行上的City值包含空格。这将使您的扫描仪不同步,并且您将得到不良的行为和/或结果。
如果您无法控制输入格式,那么您将需要做的事情比在此做的还要复杂。 Scanner()不知道忽略第5行和第6行中City值中两个单词之间的空格。
我要解决的方法是抛弃Scanner,将每行作为单个String读取,并对行应用正则表达式以从输入行中提取各个字段。您也可以做一个split()
,并假设如果返回5个元素,则应该将元素2和3合并为一个元素。不过,这有点怪癖……如果您的城市名称中有2个空格,该怎么办?。