Более простое регулярное выражение для замены нескольких шаблонов - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть следующий код для решения ситуации, когда мне нужно удалить простую разметку json:

String inputExample = "[\"883-DDEQW\"]";
inputExample = inputExample.replaceAll("]", "");
inputExample = inputExample.replaceAll("\\[", "");
inputExample = inputExample.replaceAll("\"", "");
inputExample = inputExample.replaceAll("\\\\", "");

, чтобы полученная строка стала желаемой: 883-DDEQW

Итак4 строки кода для выполнения замены.Есть ли более простой (или, я бы сказал, более краткий) способ выполнения тех же операций?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Вы можете поместить все символы, которые хотите заменить, в класс символов:

[\]\["\\]

В виде строки Java:

"[\\]\\[\"\\\\]"

Вы можете передать это replaceAll:

inputExample = inputExample.replaceAll("[\\]\\[\"\\\\]", "");
0 голосов
/ 04 февраля 2019

Вместо удаления нежелательных символов вы можете выбрать желаемый результат.В вашем случае это, кажется, последовательность букв, цифр и -.Таким образом, шаблон может выглядеть следующим образом: [\w\d-]+

@Test
public void testRegexp(){
    final Pattern pattern = Pattern.compile("([\\w\\d-]+)");
    final String inputExample = "[\"883-DDEQW\"]";
    final Matcher matcher = pattern.matcher(inputExample);
    if (matcher.find()) {
        System.out.println(matcher.group());
    }
}

Результат: 883-DDEQW

Полезный инструмент для проверки регулярных выражений: https://www.freeformatter.com/java-regex-tester.html#ad-output

Обновление:

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

@Test
public void testJson(){
    final String inputExample = "[\"883-DDEQW\"]";
    JsonArray jsonArray = new JsonParser().parse(inputExample).getAsJsonArray();
    for (final JsonElement element: jsonArray){
        System.out.println(element.getAsString());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...