заменить многострочную строку в Java - PullRequest
0 голосов
/ 02 апреля 2019

Попытка заменить многострочную строку в Java с помощью метода replaceAll, но это не работает. Что-то не так с приведенной ниже логикой?

    String content="      \"get\" : {\n" + 
    "        \"name\" : [ \"Test\" ],\n" + 
    "        \"description\" : \"Test description to replace\",\n" + 
    "        \"details\" : \"Test details\"";


    String searchString="        \"name\" : [ \"Test\" ],\n" + 
"        \"description\" : \"Test description to replace\",";


String replaceString="        \"name\" : [ \"Actual\" ],\n" + 
"        \"description\" : \"Replaced description\",";

Попробовал ниже варианты и ни один из них не работал-

Pattern.compile(searchString, Pattern.MULTILINE).matcher(content).replaceAll(replaceString);

Pattern.compile(searchString, Pattern.DOTALL).matcher(content).replaceAll(replaceString);

content = content.replaceAll(searchString, replaceString);

1 Ответ

0 голосов
/ 02 апреля 2019

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Вы не должны использовать регулярные выражения для управления JSON или XML, которые имеют бесконечное вложенное содержимое.Конечно, автоматизация не приспособлена для манипулирования этими структурами данных, и вместо этого вам следует использовать анализатор JSON / XML.

При этом, исключительно для целей обучения, я быстро исправлю ваш код.

1) Используйте replace вместо replaceAll, чтобы избежать интерпретации вашего searchString как регулярного выражения:

String content="      \"get\" : {\n" + 
            "        \"name\" : [ \"Test\" ],\n" + 
            "        \"description\" : \"Test description to replace\",\n" + 
            "        \"details\" : \"Test details\"";


String searchString="        \"name\" : [ \"Test\" ],\n" + 
        "        \"description\" : \"Test description to replace\",";


String replaceString="        \"name\" : [ \"Actual\" ],\n" + 
        "        \"description\" : \"Replaced description\",";

System.out.println(content.replace(searchString, replaceString));

output:

  "get" : {
    "name" : [ "Actual" ],
    "description" : "Replaced description",
    "details" : "Test details"

2) Или используйте replaceAll, но избегайте скобок, чтобы избежать их интерпретации как попытки определения класса символов.

String searchString="        \"name\" : \\[ \"Test\" \\],\n" + 
        "        \"description\" : \"Test description to replace\",";


String replaceString="        \"name\" : [ \"Actual\" ],\n" + 
        "        \"description\" : \"Replaced description\",";

System.out.println(content.replaceAll(searchString, replaceString));

вывод:

  "get" : {
    "name" : [ "Actual" ],
    "description" : "Replaced description",
    "details" : "Test details"

Ссылка : Как анализировать JSON в Java

  • Вы должны загрузить структуру json в объект
  • Заменить значения атрибутов этого объекта на новые значения
  • Снова экспортировать его в формате json
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...