簡體   English   中英

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

[英]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)
        }

到目前為止,我已經知道了。

導入的數據格式如下:

歐元(EUR),1.359,€

美元(USD),1.34,$

據我所知, split與正則表達式類似於沿着\\\\s*,\\\\s*可能會被用來將字符串分割成不同的組件,但據我有零的想法。

問題:我將如何進一步將琴弦拆分。

例如,將字符串的每個第一部分放入稱為currency的數組中,將字符串的每個第二部分放入稱為factor的數組中,依此類推。

您可以在for循環內使用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]);

OUTPT:

歐元(EUR)1.359€

您只需要用\\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]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM