JAVA - readfile并把它放在arraylist上

时间:2013-10-24 17:59:03

标签: java arraylist readfile

我正在做一个自我项目,以帮助我更多地了解java。但我坚持这个问题。 我有一个以下的txt文件:

Name  Hobby 
Susy  eat fish 
Anna  gardening
Billy bowling with friends

读取所有行并将其放入arraylist(名称,爱好)的最佳方法是什么。但棘手的部分是

  

与朋友一起吃鱼或打保龄球

有空格,必须放在一个数组下,显然我不能硬编码。 这是我目前的代码

public void openFile(){
    try{
        x = new Scanner(new File("D://practice.txt"));
    }catch (Exception e){
        System.out.println("File could not be found");
    }
}

public void readFile(){
    while (x.hasNextLine()){
        x.nextLine();
        if (x.hasNext()){
            listL.add(x.next());
        } else {
            listL.add("");
        }

        if (x.hasNext()){
            listR.add(x.next());
        } else {
            listR.add("");
        }
    }
}

提前谢谢...... note = 1.hobby和name用空格分隔        2.names只有一个单词

2 个答案:

答案 0 :(得分:0)

您可能希望执行以下操作,而不是scanner.next()

Scanner scan = new Scanner(new File("D://practice.txt"));
ArrayList<String> names = new ArrayList<String>();
ArrayList<String> hobbies = new ArrayList<String>();

while(scan.hasNext()){
    String curLine = scan.nextLine();
    int indexOfHobby = curLine.indexOf(' ');
    names.add(curLine.substring(0, indexOfHobby).trim());
    hobbies.add(curLine.substring(indexOfHobby).trim());
}

这样做的一个问题是两个ArrayList之间没有任何关系,所以你必须确保在迭代时注意你的索引。解决此问题的一种方法是添加Person类,以便namehobby作为Person的属性,然后ArrayList Person秒。这可能是这样的:

Class Person {
    String name;
    String hobby;

    public Person(String name, String hobby){
        this.name = name;
        this.hobby= hobby;
    }
    // more methods here
}

然后,在你的主要课程中,你会这样做:

Scanner scan = new Scanner(new File("D://practice.txt"));
ArrayList<Person> people= new ArrayList<Person>();

while(scan.hasNext()){
    String curLine = scan.nextLine();
    int indexOfHobby = curLine.indexOf(' ');
    people.add(new Person(curLine.substring(0, indexOfHobby).trim(), curLine.substring(indexOfHobby).trim() ));
}

答案 1 :(得分:0)

还考虑使用Map<String,String>将人们的爱好存储在一起,而不是保留两种不同的结构:

Scanner scan = new Scanner(new File("D://practice.txt"));
Map<String,String> namesAndHobbies = new HashMap<String,String>();

while(scan.hasNext()){
    String line = scan.nextLine();
    int idx = line.indexOf(' ');
    String name = line.substring(0, idx).trim();
    String hobby = line.substring(idx).trim();

    namesAndHobbies.put(name, hobby);
}

这将允许您按名称访问人,这样您就可以通过名字找到一个人的爱好。 使用namesAndHobbies.keySet()获取所有名称的集合,并使用namesAndHobbies.values()获取所有爱好的集合。