如何从文件接受多个字符串变量

时间:2019-05-06 00:51:18

标签: java

我正在尝试从文件读取数据并将其写入数组。我相信多个字符串变量是让我失望的原因。

我尝试使用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;
    }

1 个答案:

答案 0 :(得分:2)

您的问题是Scanner()读取由空格分隔的值,并且您希望每行都解析为4个值。这将适用于输入文件的前四行,但是随后您会有两行在技术上具有5个值,因为这些行上的City值包含空格。这将使您的扫描仪不同步,并且您将得到不良的行为和/或结果。

如果您无法控制输入格式,那么您将需要做的事情比在此做的还要复杂。 Scanner()不知道忽略第5行和第6行中City值中两个单词之间的空格。

我要解决的方法是抛弃Scanner,将每行作为单个String读取,并对行应用正则表达式以从输入行中提取各个字段。您也可以做一个split(),并假设如果返回5个元素,则应该将元素2和3合并为一个元素。不过,这有点怪癖……如果您的城市名称中有2个空格,该怎么办?。