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

Cleanest way of parsing in a text file

然后将每行分成三部分并将这些部分放入单独的 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)
        }

这就是我到目前为止所了解的。

正在导入的数据格式如下:

Euro (EUR), 1.359, €

US Dollars (USD), 1.34, $

我知道 split 以及类似于 \s*,\s* 的正则表达式可能会被用来将字符串拆分成它的各个部分,但就此而言我的想法是零。

问题:我将如何进一步拆分字符串。

例如,将字符串的每个第一部分放入一个名为 currency 的数组中,将字符串的每个第二部分放入一个名为 factor 的数组中,依此类推。

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

        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 €

您只需要用 \s*,\s* 拆分您的行(而不是 +,因为它至少需要一个 space),然后将这 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]);