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

我希望检索“ 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”,等等,然后在“ =”之后获取索引,直至“ ”,但是我对此考虑得太多了,因此我很难掌握。我想知道是否有人知道一个简单的解决方案。提前非常感谢。

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

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

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

例如,您可以拥有以下内容:

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

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

IdeOne demo

,

下面的代码给出您想要的输出。但是@Karol Dowbecki的方法更好。这段代码做同样的事情,但是没有正则表达式。

String input = "{zjdb={fname=jbdjd,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);
本文链接:https://www.f2er.com/3156459.html

大家都在问