Самый чистый способ разбора в текстовом файле - PullRequest
0 голосов
/ 04 ноября 2018

Затем разбить каждую строку на три части и поместить эти части в отдельные String[] arrays?

Так что в настоящее время я импортирую файл через BufferedReader / FileReader, добавляя каждую строку к ArrayList<String>. Это выглядит так:

     String line;

     ArrayList<String> thing = new ArrayList<String>();

     BufferedReader reader = new BufferedReader(new FileReader(
                "file.txt"));    

     while (true) {   
         line = reader.readLine();
            if (line == null) {
                break;
            }
            thing.add(line);
        }
        reader.close();

Содержимое каждого затем анализируется в String[] array в базовом цикле for.

       String[] array = new String[thing.size()];
       for(i=0;i<thing.size();i++) {
            array[i] = thing.get(i)
        }

и это насколько я дошел до сих пор.

Импортируемые данные форматируются следующим образом:

Евро (EUR), 1,359, €

долларов США (USD), 1,34, $

Я понимаю, что split вместе с регулярным выражением, похожим на \\s*,\\s*, вероятно, будет использоваться для разбиения строки на ее различные компоненты, но, насколько это возможно, у меня нулевая идея.

Вопрос: как бы я разбил строку дальше?

Например, поместив каждую первую часть строки в массив с именем currency, каждую вторую часть строки в массив с именем factor и т. Д.

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

Вам просто нужно разбить строки на \s*,\s* (а не +, потому что для этого требуется хотя бы один пробел), а затем сохранить 3 части в 3 списках. Эту опцию проще сравнить с чтением файла для сохранения каждой строки, а затем итерации по List для разделения и добавления к arrays (Other option code).

Вы можете сделать все это в цикле, который читает файл:

String line;
String[] lineSplit;

ArrayList<String> currencyList = new ArrayList<>();
ArrayList<String> factorList = new ArrayList<>();
ArrayList<String> symbolList = new ArrayList<>();

try (BufferedReader reader = new BufferedReader(new FileReader("file.txt"))) {

    while ((line = reader.readLine()) != null) {
        lineSplit = line.split("\\s*,\\s*");
        if (lineSplit.length == 3) {
            currencyList.add(lineSplit[0]);
            factorList.add(lineSplit[1]);
            symbolList.add(lineSplit[2]);
        }
    }
} catch (IOException e) {
    e.printStackTrace();
}

Если вам нужны массивы в конце, просто:

String[] currency = currencyList.toArray(new String[0]);
String[] factor = factorList.toArray(new String[0]);
String[] symbol = symbolList.toArray(new String[0]);
0 голосов
/ 04 ноября 2018

Вы можете использовать split(",") внутри цикла for, чтобы разбить каждую строку на три дополнительные части, а затем добавить их в соответствующий массив:

        List<String> thing = new ArrayList<>();
        thing.add("Euro (EUR), 1.359, €");

        String[] currency = new String[thing.size()];
        String[] factor = new String[thing.size()];
        String[] sign = new String[thing.size()];

        for(int i=0;i<thing.size();i++) {
            String parts[] = thing.get(i).split(",");
            currency[i] = parts[0];
            factor[i] =  parts[1];
            sign[i] =  parts[2];
        }

        System.out.println(currency[0] + " " + factor[0] + " " + sign[0]);

-выход:

Евро (EUR) 1.359 €

...