解析文本文件的最干净方法

时间:2018-11-03 21:07:29

标签: java arrays arraylist bufferedreader

然后将每行分成三部分,然后将这些部分分成单独的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();

然后在基本的for循环中将每个内容解析为String[] array

       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 :(得分:3)

您可以在循环中使用split(","),将每个String拆分为另外三个部分,然后将它们添加到适当的数组中:

        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€

答案 1 :(得分:0)

您只需要用\s*,\s*(而不是+来分隔行,因为它需要至少一个空格),然后将3个部分存储在3个列表中。与读取文件以存储每一行​​然后在List上进行迭代以拆分并添加到arraysOther 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]);