Java:如何从文件中读取文本和数字

时间:2011-11-22 14:18:20

标签: java file input

我正在创建一个简单的程序来读取从文本文件中读取的数据。该文件存储有关某人的信息,每行都有姓名,年龄和编号:

例如:每行的文件格式

      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++

        }

    }

}

3 个答案:

答案 0 :(得分: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+)

答案 1 :(得分:1)

以下正则表达式适用于这3个案例,将它们分成3个匹配的组。

正则表达式     (.*)\s+(\d+)\s+(\d+)

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

答案 2 :(得分:0)

如果你想这样做,你可以尝试这样做:

  1. 修复数据在文件中的显示方式,比如说

    firstName.lastName.age.number;

  2. 然后您可以编写代码来读取数据。并将其存储在变量中(您将知道它的含义)和“;”之后将有第二次进入。