我正在做一个自我项目,以帮助我更多地了解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只有一个单词
答案 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
类,以便name
和hobby
作为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()
获取所有爱好的集合。