2011-11-22 109 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