Как разделить строку между квадратными скобками, как показано ниже

#java #string #split

#java #строка #разделить

Вопрос:

Я хочу разделить строку

 [{"starDate":"","endDate":"","relativeDays":,"cronExpression":""},{"starDate":"","endDate":"","relativeDays":,"cronExpression":""}]
 

Для

 {"starDate":"","endDate":"","relativeDays":,"cronExpression":""}
{"starDate":"","endDate":"","relativeDays":,"cronExpression":""}
 

Комментарии:

1. Это выглядит как действительный json. Не могли бы вы проанализировать ее вместо использования некоторых подверженных ошибкам манипуляций со строками? РЕДАКТИРОВАТЬ: нет, это недопустимый json, в «relativeDays» отсутствует его значение.

2. На что вы хотите разделить строку, всего на две строки или вы хотите создать коллекцию с парами ключ / значение?

Ответ №1:

Возможно, этот однострочный вариант подойдет вам, поскольку неясно, хотите ли вы две строки или одну строку с явными разрывами строк

 String str = "[{"starDate":"","endDate":"","relativeDays":,"cronExpression":""},{"starDate":"","endDate":"","relativeDays":,"cronExpression":""}]";
        
str = String.join("},", str.replaceAll("^\[|]$ ", "").split("},"));

 

Ответ №2:

В идеале вы должны сделать это надлежащим образом, используя синтаксический анализ JSON, если это применимо.

Между тем, для этого очень конкретного случая вы можете использовать регулярное выражение для извлечения нужных вам частей (пример в Java). :

 String input = "[{"starDate":"","endDate":"","relativeDays":,"cronExpression":""},{"starDate":"","endDate":"","relativeDays":,"cronExpression":""}]";
Matcher matcher = Pattern.compile("(\{[^\}]*\})").matcher(input);
while( matcher.find() )
    System.out.println(matcher.group(1));
 

Это приведет к :

 {"starDate":"","endDate":"","relativeDays":,"cronExpression":""}
{"starDate":"","endDate":"","relativeDays":,"cronExpression":""}