java - 解析使用空格作为分隔符的文件 -java.lang. (我不明白)

标签 java oop parsing arraylist delimiter

有人可以帮我理解我做错了什么吗? 我必须读取一个文件,每行包含 11 个整数和 double ,每一行都需要成为自己的对象并存储在 arrayList 中。但是,分隔符是单个空格。我已经使用了这段代码,但它似乎不起作用,我不确定我做错了什么。

package p2_0000000;

import java.util.Scanner;
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;


public class P2_000000 {


    public static void main(String[] args) {
        // TODO code application logic here
        System.out.println("Which file year would you like to analyze:\n"
                + "1) 2007\n"
                + "2) 2011\n"
                + "3) 2013\n"
                + "(Enter number for choice)");
        Scanner input = new Scanner(System.in);
        int choice = input.nextInt();
        ArrayList<dwellingClass> alist = new ArrayList<dwellingClass>();
        if (choice == 1) {
            try {
                File file = new File("2007.txt");
                Scanner scanner = new Scanner(file);


                while (scanner.hasNextLine()) {
                    String line = scanner.nextLine();
                    String[] info = line.split(" ");

                    int age = Integer.parseInt(info[0]);
                    int region = Integer.parseInt(info[1]);
                    double lmed = Double.parseDouble(info[2]);
                    double fmr = Double.parseDouble(info[3]);
                    double extremelyLowIncome = Double.parseDouble(info[4]);
                    double veryLowIncome = Double.parseDouble(info[5]);
                    double lowIncome = Double.parseDouble(info[6]);
                    int bedrooms = Integer.parseInt(info[7]);
                    double value = Double.parseDouble(info[8]);
                    int rooms = Integer.parseInt(info[9]);
                    double utility = Double.parseDouble(info[10]);

                    dwellingClass dwelling = new dwellingClass(age, region, lmed, fmr, extremelyLowIncome, veryLowIncome, lowIncome, bedrooms, value, rooms, utility);
                    alist.add(dwelling);

                }
                scanner.close();

            } catch (Exception a) {
                a.printStackTrace();
                System.exit(0);
            };
            for (dwellingClass each : alist) {
                System.out.println(each);
            }

        }

        System.out.println(alist.get(0).getAge());
    }
}

我收到这些错误:

java.lang.NumberFormatException: For input string: ""
    at        java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:592)
    at java.lang.Integer.parseInt(Integer.java:615)

谢谢大家的帮助! 我还发现这也适用于稍后阅读这篇文章的任何人:

public class P2_0000000 {

    public static void main(String[] args) {
        // TODO code application logic here
        ArrayList<dwellingClass> alist = new ArrayList<dwellingClass>();
        try {
            File file = new File("2007.txt");
            Scanner input = new Scanner(file);

            while (input.hasNext()) {

                int age = input.nextInt();
                int region = input.nextInt();
                double lmed = input.nextDouble();
                double fmr = input.nextDouble(); 
                double extremelyLowIncome = input.nextDouble();
                double veryLowIncome = input.nextDouble();
                double lowIncome = input.nextDouble();
                int bedrooms = input.nextInt();
                double value = input.nextDouble();
                int rooms = input.nextInt(); 
                double utility = input.nextDouble(); 

                dwellingClass dwelling = new dwellingClass(age, region,  lmed, fmr, extremelyLowIncome, veryLowIncome, lowIncome, bedrooms, value, rooms, utility);
                alist.add(dwelling);

            }
            input.close();

        } catch (Exception a) {
            a.printStackTrace();
            System.exit(0);
        };
        for (dwellingClass each : alist) {
            System.out.println(each.getAge() + each.getRegion());
        }
        System.out.println(alist.get(0).getAge()); 
    }
}

最佳答案

首先你可以这样读取文件:

Scanner in = new Scanner(new FileReader("2007.txt"));

其次要解析空格,您需要使用如下内容:

yourString.split("\\s+");

所以你的这一行应该变成:

String[] info = line.split("\\s+");

然后您就可以按照您的方式访问您的String

但是请确保您向每个方法传递了正确的值,即正确的类型,否则您将收到您所收到的错误。

关于java - 解析使用空格作为分隔符的文件 -java.lang. (我不明白),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40687640/

相关文章:

c++ - 为什么 C++ STL 如此大量地基于模板? (而不是在*接口(interface)*上)

python - 对象继承和嵌套 cmd

c# - 从基类中的派生类获取属性

python - 使用 NLTK 导入外部树库式 BLLIP 语料库

javascript - 从 JavaScript 中的自定义语法创建 AST

java - 在 Java 中从 HTTP 响应解析 JSON 数组

java - 尝试在 Android Studio 中对空对象引用调用虚拟方法 'android.content.Context.getApplicationInfo()'

java - Spring Batch @StepScope 无法生成 CGLIB 子类

java - 从安卓连接到 XMPP 服务器

java - 在 OnClick android 上启动后台服务