Как прочитать определенную часть строки в текстовом файле в Java? - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть текстовый файл, в котором я построчно записал некоторую информацию:

name|Number|amount|PIN

Как я могу прочитать данные таким образом, чтобы (например) я смог использовать только часть имени в методе? Пример кода показан на рисунке ниже.

pic 1

pic 2

Ответы [ 7 ]

1 голос
/ 01 апреля 2019

в начале объявляем Список для сбора счетов:

import java.util.ArrayList;
...

public Account[] inReader() { //BTW: why do you pass an Account[] here? 
ArrayList accountList = new ArrayList();
    ...
}

заменить for(String records : dataRecords) {...} на

String name = dataRecords[0];
String cardNumber = dataRecords[1];
int pin = Integer.parseInt(dataRecords[2]); //to convert the String back to int
double balance = Double.parseDouble(dataRecords[3]);

Account account = new Account(name, cardNumber, pin, balance);
accountList.add(account);

потому что вы уже продолжаете запись за записью (while ((line = br.readLine())!=null) {...})

в конце return accountList.toArray(new Account[0]);

0 голосов
/ 01 апреля 2019

Вы можете преобразовать файл в файл CSV и использовать библиотеку, специфичную для чтения файлов CSV, например, OpenCSV.Это даст вам больше гибкости при обработке данных в файле.

0 голосов
/ 01 апреля 2019

Есть много возможных способов сделать это.Одним из них является создание объекта, который будет содержать данные.Пример, так как вы знаете, что ваши данные всегда будут иметь имя, номер, сумму и пин-код, тогда вы можете создать класс, подобный этому:

public class MyData {
    private String name;
    private String number;
    private double amount;
    private String pin;

    // Add getters and setters below
}

Затем, читая текстовый файл, вы можете составить список MyDataи добавьте каждый данные.Вы можете сделать это следующим образом:

try {
    BufferedReader reader = new BufferedReader(new FileReader("path\file.txt"));
    String line = reader.readLine();
    ArrayList<MyData> myDataList = new ArrayList<MyData>();
    while (line != null) {
        String[] dataParts = line.split("|"); // since your delimiter is "|"
        MyData myData = new MyData();
        myData.setName(dataParts[0]);
        myData.setNumber(dataParts[1]);
        myData.setAmount(Double.parseDouble(dataParts[2]));
        myData.setPin(dataParts[3]);
        myDataList.add(myData);
        // read next line
        line = reader.readLine();
} catch (IOException e) {
    e.printStackTrace();
}

Тогда вы можете использовать данные следующим образом:

myDataList.get(0).getName(); // if you want to get the name of line 1
myDataList.get(1).getPin(); // if you want to get the pin of line 2
0 голосов
/ 01 апреля 2019

Во-первых, вам нужно прочитать все содержимое файла или построчно.Затем для каждой строки необходимо создать функцию для разделения текста строки с помощью настраиваемого разделителя.Эта функция может получить номер столбца и должна вернуть нужное значение.Например: extractData (строка, 0) должна возвращать «имя», extractData (строка, 2) должна возвращать «сумму» и т. Д.

Кроме того, вам нужна некоторая проверка: что, если есть только 3 столбца и выожидать 4?Вы можете бросить и исключение или вы можете вернуть ноль / пусто.

0 голосов
/ 01 апреля 2019

Как упоминалось в комментарии выше, вы можете просто split строка в вашем разделителе, |, и перейти оттуда.

Что-то вроде:

public class Account {
    // ...
    public static Account parseLine(String line) {
        String[] split = line.split("|");
        return new Account(split[0], split[1], split[2], split[3]);
    }
}

должно работать нормально (при условии, что у вас есть конструктор, который берет четыре вещи, которые вы вставляете). Если ваш Account класс имеет больше информации, чем эта, вы можете создать AccountView или класс с аналогичным именем, который содержит только те сведения, которые вы здесь имеете. При этом просто перебирайте строку за строкой, анализируйте свои строки для одного из этих Object s и используйте его свойства (включая уже доступные методы получения) при вызове других методов, которым требуется name и т. Д.

0 голосов
/ 01 апреля 2019

Вы можете прочитать файл построчно и разделить на разделитель '|'.

В следующем примере предполагается, что путь к файлу указан в аргументах [0] и будет читать, а затем выводить компонент имени ввода:

public static void main(String[] args) {
    File file = new File(args[0]);
    BufferedReader br = new BufferedReader(new FileReader(file));

    while(String line = br.readLine()) != null) {
        String[] details = line.split("|");
        System.out.println(details[0]);
    }
}
0 голосов
/ 01 апреля 2019

Вы можете прочитать текст построчно, а затем использовать «|»разделитель для разделения столбцов.

try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
        stream.forEach(System.out::println);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...