2011-11-22 134 views
2

我正在創建一個簡單的程序來從文本文件中讀取數據。該文件中存儲一個人的信息,名稱,年齡,每行一個數字:Java:我如何從文件中讀取文本和數字

如:每行文件格式

 Francis Bacon 50 2 

我可以在一個文件中讀取沒有問題,如果它僅僅是文本,但我很困惑如何區分文本和數字。下面來看看我的代碼:

import java.io.*; 


public class Test{ 

    private People people[] = new People[5]; 


    public Test(){ 
     BufferedReader input; 

     input = new BufferedReader(new FileReader("People.txt"));// file to be readfrom 
     String fileLine; 
     int i = 0; 

     while (test != null){ 
      fileLine = input.readLine(); 

      // Confused as to how to parse this line into seperate parts and store in object: 
      // eg: 
      people[i].addName(fileLine - part 1); 
      people[i].addBookNo(fileLine - part 2); 
      people[i].addRating(fileLine - part 3) 

      i++ 

     } 

    } 

} 

回答

5

我強烈建議你使用Scanner類代替。該課程爲您提供諸如nextInt等的方法。

你可以用它從文件中直接這樣閱讀:

Scanner s = new Scanner(new File("People.txt")); 

while (s.hasNext()) { 
    people[i].addName(s.next()); 
    people[i].addBookNo(s.nextInt()); 
    people[i].addRating(s.nextInt()); 
} 

(剛剛意識到,你可能有在名稱空間,稍微複雜的事情,但我仍然會考慮使用掃描儀。 )

另一種解決方案是使用正則表達式和組來解析零件。像這樣的東西應該做的:

(.*?)\s+(\d+)\s+(\d+) 
+0

我強烈建議他學習一些編程... – Gabe

+0

很大。我沒有使用正則表達式的經驗,我該如何將它存儲在字符串中? – BodhiByte

0

如果你想在這樣做,你可以嘗試做這樣的:

  1. 固定方式的數據將出現在該文件中,說

    firstName.lastName.age.number;

  2. 然後你可以編寫代碼讀取數據。並將其存儲在一個變量中(您將會知道它的意思),並且在「;」之後會有第二個入口。

1

下面的正則表達式適用於這3種情況,將它們分成3個匹配的組。

正則表達式 (.*)\s+(\d+)\s+(\d+)

案件

Francis Bacon 50 2 
Jill St. John 20 20 
St. Francis Xavier III 3 3