получить в итоге только ключ : значение ? Перечисления бывают разными. Описание ниже

Рейтинг: 0Ответов: 1Опубликовано: 31.01.2023

Вопрос уже был мною задан здесь и @ipatev_nn дал мне подсказку, но не понимаю как улучшить..

У меня есть строка

charAndValue = "[Type of document : A copy, the book, Document format : A4]"

Я пытаюсь решить свою проблему сплитом:

 String charAndValue = "[Type of document : A copy, the book, Document format : A4]"
 List<String> listVal = new ArrayList<>(Arrays.asList(charAndValue.split(", (?=[A-Z])")));

После сплита у меня лист с размером 2, как мне и нужно:

"Type of document : A copy, the book"

"Document format : A4"

Но есть вариант, когда приходит строка, например:

 String charAndValue = "[Регион оказания услуг : Москва, Московская область]"

И получается лист с размером два:

"Регион оказания услуг : Москва" 

"Московская область"

Ответы

▲ 1Принят

Можно дополнить условие разбиения: ", (?=\\p{Lu}[^:]+:)", тогда может отработать:

String charAndValue = "[Type of document : A copy, the book, Document format : A4, Регион оказания услуг : Москва, Московская область, Российская Федерация]";
List<String> listVal = new ArrayList<>(Arrays.asList(charAndValue.split(", (?=\\p{Lu}[^:]+:)")));
listVal.forEach(System.out::println);
[Type of document : A copy, the book
Document format : A4
Регион оказания услуг : Москва, Московская область, Российская Федерация]