Java: Как я могу читать текст и цифры из файла - PullRequest
2 голосов
/ 22 ноября 2011

Я создаю простую программу для чтения данных из текстового файла. В файле хранится информация о человеке с именем, возрастом и номером в каждой строке:

Например: формат файла на строку

      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 ]

5 голосов
/ 22 ноября 2011

Я настоятельно рекомендую вам использовать класс 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 голос
/ 22 ноября 2011

Следующее регулярное выражение работает с этими 3 случаями, разбивая их на 3 подходящие группы.

Регулярное выражение (.*)\s+(\d+)\s+(\d+)

Случаи

Francis Bacon  50    2
Jill St. John 20 20
St. Francis Xavier III 3 3 
0 голосов
/ 22 ноября 2011

Если вы хотите сделать это таким образом, вы можете попробовать сделать так:

  1. Исправление способа представления данных в файле, скажем

    firstName.lastName.age.number;

  2. Затем вы можете написать код для чтения данных до. и сохраните его в переменной (вы будете знать, для чего она предназначена) и после ";" будет вторая запись.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...