1

我正在做一个自我项目来帮助我更多地了解 java.but 我被困在这个问题上。我有以下 txt 文件:

Name  Hobby 
Susy  eat fish 
Anna  gardening
Billy bowling with friends

阅读所有行并将其放入 arraylist(name,hobby) 的最佳方法是什么。但棘手的部分是

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

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

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("");
        }
    }
}

在此先感谢... 注意 = 1.hobby 和 name 用空格分隔 2.names 只有一个单词

4

2 回答 2

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());
}

这样做的一个问题是两个 s 之间没有关系ArrayList,因此在迭代时必须确保注意索引。解决此问题的一种方法是添加一个Person类,以便您可以拥有nameandhobby作为 的属性Person,然后拥有ArrayListof Persons。这可能看起来像这样:

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() ));
}
于 2013-10-24T18:06:07.343 回答
0

还可以考虑使用 aMap<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()获取所有爱好的集合。

于 2013-10-24T18:17:00.763 回答