Как получить все записи в строке после определенного значения - PullRequest
0 голосов
/ 05 ноября 2019

Я ищу, чтобы получить все значения после "xnum =" и перед разделителем ",". Например, в приведенной ниже строке я хотел бы получить значения "zjdb" и "2jdb" и сохранить их в массиве в порядке их поиска. Я знаю, что это очень случайная вещь, которую нужно просить, но, к сожалению, это единственный способ решить проблему, с которой я сталкиваюсь в настоящее время. а затем посмотрите, является ли следующий символ «n», а следующий - «u» и т. д., а затем получите индекс после «=» и до «,», но я слишком много думал об этом, и это слишком сложно для меняполучить. Мне интересно, если кто-нибудь знает несколько простое решение этого ..? Большое спасибо заранее.

Ответы [ 3 ]

0 голосов
/ 06 ноября 2019

Вы можете использовать регулярные выражения и некоторые замены для очистки текста.

Например, у вас может быть что-то вроде этого:

String str = "{zjdb={fname=jbdjd, lname=ejdj, xnum=zjdb, email=ejdj}, 2jdb={fname=ij, lname=vji, xnum=2jdb, email=bbb}}";
String[] result = str.replaceAll(".*?(xnum[^}]*).*", "$1")
                     .replaceAll(", *", ",")
                     .split(",");

for (String item : Arrays.asList(result)) {
    System.out.println(item.split("=")[1]);
}

IdeOne demo

0 голосов
/ 06 ноября 2019

Ниже код дает вывод, который вы хотите. Но подход @Karol Dowbecki лучше. Этот код делает то же самое, но без регулярного выражения.

String input = "{zjdb={fname=jbdjd, lname=ejdj, xnum=zjdb, email=ejdj}, 2jdb={fname=ij, lname=vji, xnum=2jdb, email=bbb}}";

    String[] b = input.split(",");

    List<String> list = Arrays.stream(b).filter(s -> s.contains("xnum=")).collect(Collectors.toList());
    List<String> finalList = new ArrayList<>();

    for (String s : list) {
        String x = s.replace("xnum=","");
        finalList.add(x);
    }

    System.out.println(finalList);
0 голосов
/ 06 ноября 2019

Вы можете использовать регулярное выражение, чтобы найти токены. Предполагая, что входные данные хорошо отформатированы, например, после значения xnum= есть либо ,, либо }:

String input = "{zjdb={fname=jbdjd, lname=ejdj, xnum=zjdb, email=ejdj}, 2jdb={fname=ij, lname=vji, xnum=2jdb, email=bbb}}";
Pattern p = Pattern.compile("[{ ]xnum=([^,}]+)[,}]");
Matcher m = p.matcher(input);
while (m.find()) {
  String xnum = m.group(1);
  System.out.println(xnum);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...