簡體   English   中英

按條件拆分和配對子字符串

[英]Split and pair substrings by condition

我有一個像這樣的字符串: "aa-bb,ccdd,eeff,gg-gg,cc-gg" 我需要用'-'符號分割字符串並從中創建兩個字符串,但是如果原始字符串的逗號分隔部分不包含'-' ,則需要使用一些占位符而不是子字符串。 在上述示例的情況下,輸出應為:

字串1:

"{aa,ccdd,eeff,gg,cc}"

字串2:

"{bb,0,0,gg,gg}"

我不能使用lastIndexOf()方法,因為輸入位於一個字符串中。 我不確定零件的數量。

if(rawIndication.contains("-")){
    String[] parts = rawIndication.split("-");
    String part1 = parts[0];
    String part2 = parts[1];
}

這是使用流的Java 8解決方案。 邏輯是先用逗號分割輸入字符串,生成一個術語數組。 然后,對於每個術語,我們再次在破折號處分開,保留第一個條目。 如果術語沒有破折號,則整個字符串將被保留。 最后,我們連接回一個輸出字符串。

String input = "aa-bb,ccdd,eeff,gg-gg,cc-gg";
int pos = 1;
String output = String.join(",", Arrays.stream(parts) 
    .map(e -> e.split("-").length >= (pos+1) ? e.split("-")[pos] : "0")
    .toArray(String[]::new));

System.out.println(output);

輸出:

bb,0,0,gg,gg

使用解決問題的方式,實際上應該首先用逗號分隔。 然后,您應該遍歷調用結果以使用連字符對輸出數組中的每個字符串進行split和拆分(如果存在的話)。 如果沒有連字符,則可以在字符串2上添加0 ,將字符串本身添加到字符串1。如果有連字符,則將左側添加到字符串1,將右側添加到字符串2。這是一種方法你可以這樣做,

if(rawIndication.contains(",")){
    String s1 = "{";
    String s2 = "{";
    String[] parts = rawIndication.split(",");
    for(int i = 0; i < parts.length; i++) {
        if(parts[i].contains("-") {
            String[] moreParts = parts[i].split(",");
            s1 = s1 + moreParts[0] + ",";
            s2 = s2 + moreParts[1] + ",";
        }
        else{
            s1 = s1 + parts[i] + ",";
            s2 = "0,";
        }
    }
    s1 = s1.substring(0, s1.length() - 1); //remove last extra comma
    s2 = s2.substring(0, s2.length() - 1); //remove last extra comma
    s1 = s1 + "}";
    s2 = s2 + "}";
}
    List<String> list1 = new ArrayList<>();
    List<String> list2 = new ArrayList<>();

    // First split the source String by comma to separate main parts
    String[] mainParts = sourceStr.split(",");

    for (String mainPart: mainParts) {
        // Check if each part contains '-' character
        if (mainPart.contains("-")) {
            // If contains '-', split and add the 2 parts to 2 arrays
            String[] subParts = mainPart.split("-");
            list1.add(subParts[0]);
            list2.add(subParts[1]);

        } else {
            // If does not contain '-', add complete part to 1st array and add placeholder to 2nd array
            list1.add(mainPart);
            list2.add("0");
        }
    }

    // Build the final Strings by joining String parts by commas and enclosing between parentheses
    String str1 = "{" + String.join(",", list1) + "}";
    String str2 = "{" + String.join(",", list2) + "}";

    System.out.println(str1);
    System.out.println(str2);

我認為這可以解決您的問題。

private static void splitStrings() {
   List<String> list = Arrays.asList("aa-bb", "ccdd", "eeff", "gg-gg", "cc-gg");
    List firstPartList = new ArrayList<>();
    List secondPartList = new ArrayList<>();
    for (String undividedString : list){
        if(undividedString.contains("-")){
            String[] dividedParts = undividedString.split("-");
            String firstPart = dividedParts[0];
            String secondPart = dividedParts[1];
            firstPartList.add(firstPart);
            secondPartList.add(secondPart);
        } else{
            firstPartList.add(undividedString);
            secondPartList.add("0");
        }
    }

    System.out.println(firstPartList);
    System.out.println(secondPartList);
}

輸出是-

[aa, ccdd, eeff, gg, cc]
[bb, 0, 0, gg, gg]

暫無
暫無

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

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