如何在特定值后检索字符串中的所有记录

问题描述 投票:0回答:3

我正在寻找在“ xnum =”之后和“,”分隔符之前的所有值。例如,在下面的字符串中,我想检索值“ zjdb”和“ 2jdb”并将它们按找到的顺序存储在数组中。我知道这是一个非常随意的事情,但是不幸的是,这是解决我目前面临的问题的唯一方法。

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

我知道我需要遍历并搜索“ x”,然后查看下一个字符是否为“ n”,下一个字符是否为“ u”等,然后在“ =”之后获取索引,直到“ “但是我想得太多了,这对我来说太复杂了。我想知道是否有人知道一个简单的解决方案。提前非常感谢。

java string loops
3个回答
0
投票

您可以使用正则表达式来查找标记。假设输入格式正确,例如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);
}

0
投票

您可以使用正则表达式和一些替换项来清除文本。

例如,您可以拥有类似的东西:

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
投票

下面的代码给出您想要的输出。但是@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);
© www.soinside.com 2019 - 2024. All rights reserved.