По сути, у меня есть строковое представление списка через запятую.Однако каждый отдельный элемент также разделяется запятой, поэтому строка была изменена, чтобы каждый элемент был окружен символами «<» и «>».Я пытаюсь использовать регулярные выражения для захвата каждого элемента и добавления его в список, что делает его списком элементов, а не строкой списка.
Вот несколько примеров входных данных строки:
"<>" // should match regex, but will be thrown out
"<a=1>"
"<a=1,b=1>"
"<a=1,b=1>,<a=2,b=2>"
"<a=1,b=1>,<a=2,b=2>,<a=3,b=3,c=3>,<a=4>"
Соответствующие выходные данные, которые я хотел бы, были бы такими списками:
["a=1"]
["a=1,b=1"]
["a=1,b=1","a=2,b=2"]
["a=1,b=1","a=2,b=2","a=3,b=3,c=3","a=4"]
Шаблон, который я пытаюсь использовать:
Pattern pattern = Pattern.compile("<([^>]*)>(,<([^>]*)>)*");
Но когда я пытаюсь создатьсписок, он не обрабатывает каждое дополнительное вхождение как новую группу.
Matcher matcher = pattern.matcher(myString);
if (matcher.matches()) {
List<String> listOfElements = new ArrayList<>();
for (int i = 1; i <= matcher.groupCount(); i++) { // group 0 represents the entire String, so start at index 1
if (matcher.group(i) != null) {
listOfElements.add(matcher.group(i));
}
}
System.out.println(listOfElements);
}
В результате вышеприведенных тестов:
["a=1"]
["a=1,b=1"]
["a=1,b=1", ",<a=2,b=2>", "a=2,b=2"]
["a=1,b=1", ",<a=4>", "a=4"]
Примечание: я добавил к этому кавычкирезультат для читабельности, чтобы отделить значения в списке - очевидно, System.out.println () не записывает кавычки.
Что такое регулярное выражение для этого?Или, если есть лучший способ, чем использовать регулярные выражения, я был бы рад услышать, хотя имейте в виду, что я предпочел бы не использовать сторонний пакет.