Сплит и пара подстрок по условию - PullRequest
1 голос
/ 16 мая 2019

У меня есть такая строка: "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];
}

Ответы [ 4 ]

2 голосов
/ 16 мая 2019

Вот решение 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
1 голос
/ 16 мая 2019

Я думаю, что это решает вашу проблему.

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]
1 голос
/ 16 мая 2019
    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);
1 голос
/ 16 мая 2019

С учетом того, как вы структурировали проблему, вы должны сначала разделить запятыми.Затем вы должны перебрать результат вызова split и разбить каждую строку в выведенном массиве на дефис, если таковой существует.Если дефиса нет, вы можете добавить 0 к строке 2 и саму строку к строке 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 + "}";
}
...