簡體   English   中英

如何從字符串列表中連接字符串 Java

[英]how to Concatenate Strings from a list of strings Java

我無法將以下格式的字符串列表連接到 csv。

當前列表(來自從文件中讀取的字符串列表)

  • 0000
  • 0001
  • 0002
  • 0000
  • 0002
  • 0000
  • 等等...

記錄總是有 0000,其他記錄是可選的。 每一行都是一條記錄(實際上是交易記錄)。 如果 0001/0002 丟失,我需要填充空間

我所做的是一個復雜的代碼來檢查上一行和下一行。 例如,如果當前行是 0002,下一行是 0000,則打印連接的字符串。 應該有一種更簡單的方法,更簡單的邏輯。

打印/CSV 文件的所需輸出顯示在下面的 html 表中,您必須單擊運行代碼片段

 <table style="border-collapse:collapse;border-spacing:0" class="tg"><thead><tr><th style="background-color:#efefef;border-color:#000000;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;font-weight:normal;overflow:hidden;padding:10px 5px;text-align:left;vertical-align:top;word-break:normal"><span style="font-weight:bold">record00</span></th><th style="background-color:#efefef;border-color:#000000;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;font-weight:normal;overflow:hidden;padding:10px 5px;text-align:left;vertical-align:top;word-break:normal"><span style="font-weight:bold">record01</span></th><th style="background-color:#efefef;border-color:#000000;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;font-weight:normal;overflow:hidden;padding:10px 5px;text-align:left;vertical-align:top;word-break:normal"><span style="font-weight:bold">record02</span></th></tr></thead><tbody><tr><td style="background-color:#efefef;border-color:#000000;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;text-align:left;vertical-align:top;word-break:normal">0000</td><td style="background-color:#efefef;border-color:#000000;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;text-align:left;vertical-align:top;word-break:normal">0001</td><td style="background-color:#efefef;border-color:#000000;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;text-align:left;vertical-align:top;word-break:normal">0002</td></tr><tr><td style="background-color:#efefef;border-color:#000000;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;text-align:left;vertical-align:top;word-break:normal">0000</td><td style="background-color:#efefef;border-color:#000000;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;text-align:left;vertical-align:top;word-break:normal"></td><td style="background-color:#efefef;border-color:#000000;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;text-align:left;vertical-align:top;word-break:normal">0002</td></tr><tr><td style="background-color:#efefef;border-color:#000000;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;text-align:left;vertical-align:top;word-break:normal">0000</td><td style="background-color:#efefef;border-color:#000000;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;text-align:left;vertical-align:top;word-break:normal">0001</td><td style="background-color:#efefef;border-color:#000000;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;text-align:left;vertical-align:top;word-break:normal"></td></tr><tr><td style="background-color:#efefef;border-color:#000000;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;text-align:left;vertical-align:top;word-break:normal">0000</td><td style="background-color:#efefef;border-color:#000000;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;text-align:left;vertical-align:top;word-break:normal">0001</td><td style="background-color:#efefef;border-color:#000000;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;text-align:left;vertical-align:top;word-break:normal"></td></tr><tr><td style="background-color:#efefef;border-color:#000000;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;text-align:left;vertical-align:top;word-break:normal">0000</td><td style="background-color:#efefef;border-color:#000000;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;text-align:left;vertical-align:top;word-break:normal"></td><td style="background-color:#efefef;border-color:#000000;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;text-align:left;vertical-align:top;word-break:normal">0002</td></tr></tbody></table>

我創建的當前java代碼:

    List<String> collectfilelines = new ArrayList<>();
    try (BufferedReader reader = new BufferedReader(new FileReader("C:\\merged\\Merged.txt"))) {
        String line = reader.readLine();

        while (line != null) {
            collectfilelines.add(line);
            line = reader.readLine();
        }
    } catch (IOException exc) {
        System.out.println("problem reading the  file" + exc);
    }


    String records = "";
    int i;
    int imax = collectfilelines.size();
    for (i = 0; i < imax; i++) {
        String line = collectfilelines.get(i);
        String currentline;
        String linenext;
        String previousline = null;
        if (i >0) {
            previousline = collectfilelines.get(i - 1).substring(0,4);
        } else {
            previousline = collectfilelines.get(i).substring(0,4);
        }
        if (i < imax-1) {
            linenext = collectfilelines.get(i + 1).substring(0,4);
        } else {
            linenext = "9999";
        }
        currentline = line.substring(0,4);

        if (currentline.equals("0000")) {
            records = line;
        }
        if (currentline.equals("0001") && (linenext.equals("0002"))) {
            records = records + " " + line;
        }
        if (currentline.equals("0001") && ((linenext.equals("0000"))||(linenext.equals("9999")))) {
            records = records + " " + line;
            System.out.println(records);}

        if (currentline.equals("0002")) {
            if (previousline.equals("0000")) {
                records = records + "            " + line;
            }
            if (previousline.equals("0001")) {
                records = records + " " + line;
            }
            System.out.println(records);
        }


    }

}

**編輯:**出於某些原因,我在https://coderanch.com/t/734045/java/Complex-array-operation-java-checking#3414904上發布了類似/幾乎相同的問題

你可以這樣做。

static void printCsv(List<String> collectfilelines) {
    StringBuilder record = new StringBuilder();
    int prevFieldNo = 0;
    for (String line : collectfilelines) {
        int fieldNo = Integer.parseInt(line.substring(0, 4));
        if (fieldNo <= prevFieldNo) {
            if (record.length() != 0)
                System.out.println(record);
            record.setLength(0);
            prevFieldNo = 0;
        }
        for (; prevFieldNo < fieldNo; prevFieldNo++)
            record.append(',');
        record.append(line);
    }
    if (record.length() != 0)
        System.out.println(record);
}

但是,我強烈建議在生成 CSV 格式的輸出時使用 CSV 庫,以確保在數據包含逗號時正確編碼。

測試

printCsv(Arrays.asList("0000","0001","0002","0000","0002","0000","0001","0000","0001"));
printCsv(Arrays.asList("0000 The", "0001 quick", "0002 brown",
                       "0000 fox", "0002 jumps", "0005 over", "0009 the",
                       "0000 lazy", "0001 dog"));

輸出

0000,0001,0002
0000,,0002
0000,0001
0000,0001
0000 The,0001 quick,0002 brown
0000 fox,,0002 jumps,,,0005 over,,,,0009 the
0000 lazy,0001 dog

暫無
暫無

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

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