2013-10-24 58 views
1

我正在做一個自我項目,以幫助我更多地瞭解java.but但我堅持在這個問題。 我有以下txt文件:JAVA - readfile並把它放在arraylist

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

在此先感謝... 注= 1.hobby和名之間用空格分隔 2.names只會有隻

+0

第一個單詞是否有空格?名稱/愛好是用空格還是標籤分隔?請給我們更多的信息。 – Darkhogg

+0

如果你的意思是讓它從'朋友的比利保齡球'開始,並且將'朋友保齡球'添加到你的ArrayList中,你可以讀取整行,然後在名字和任務在你的文本文件中。這可以通過子字符串函數和indexOf來完成。但是如果名稱有多個單詞,請嘗試更改文本文件以使用逗號分隔名稱和任務。 –

+0

@Darkhogg 1.hobby和name由空格分隔2.names只會有一個字。 – user2891092

回答

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 S之間沒有任何關係,所以你要一定要提個醒r指數,當你迭代。解決此問題的一種方法是添加一個Person類,以便您可以將namehobby作爲Person的屬性,然後具有Person s的ArrayList。這可能是這樣的:

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

考慮使用'trim()'去除空白周圍的名字/愛好 – Darkhogg

+0

@Darkhogg很好的捕獲;添加它。 –

+0

謝謝@netinept。我將用你的答案作爲我學習JAVA的指導 – user2891092

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()獲得所有業餘愛好的集合。

相關問題