заменить спецификацию c слово после спецификации c символ в java - PullRequest
1 голос
/ 21 июня 2020

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

String tst = " {"id":$.id, "parent_id":200}";

Я пытаюсь извлечь $ .id из этой строки и заменить ее другим словом. На данный момент я пробовал:

tst = tst.replaceAll("(\\$.).", "other_word");

Но этот код заменяет все остальное (например, «parent_id» ...) другим словом, вот результат:

{"id":other_wordd_mag, "parent_id":200}

это замена только "i" на "id_mag" любое решение?

Ответы [ 2 ]

2 голосов
/ 21 июня 2020

Этот код, кажется, заменяет, как ожидалось:

String tst = " {\"id\":$.id, \"parent_id\":200}";
System.out.println(tst.replaceAll("\\$\\.id", "other_word"));

Вывод:

{"id":other_word, "parent_id":200}

Обновить Если вам нужно заменить некоторые переменные внутри JSON , вы можете использовать следующее регулярное выражение:

String tst = "{\"id\":$.id, \"name\":$.name, \"parent_id\":200}";
System.out.println(tst.replaceAll("(\\$\\.\\w+)", "\"other_word\"")); // using shorthand for word characters

output:

{"id":"other_word", "name":"other_word", "parent_id":200}

Или, если у вас есть карта переменных в виде пар ключ-значение, вы можете использовать это метод:

static String replaceVars(String src, Map<String, String> vars) {
    for (Map.Entry<String, String> e : vars.entrySet()) {
        src = src.replaceAll("(\\$\\." + e.getKey()+ ")", "\"" + e.getValue()+"\"");
    }
    return src;
}
// -----------

String tstDiff = "{\"id\":$.id, \"name\":$.name, \"parent_id\":200}";
System.out.println(replaceVars(tstDiff, Map.of("id", "my_id", "name", "my_name")));

вывод:

{"id":"my_id", "name":"my_name", "parent_id":200}
0 голосов
/ 21 июня 2020

Работа с этими типами строк может быть немного проще, если вы знаете, что такое JSON. И Java также имеет действительно хорошую библиотеку для обработки Json строк под названием GSON . Вы можете использовать эту библиотеку, и для этого конкретного случая c используйте метод from Json.

Но если вы хотите работать с регулярным выражением и познакомиться со строками:

tst.replaceAll("\\$\\.id", "other_word")

Это должно работать правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...