Java 如何在某个值之后检索字符串中的所有记录

Java 如何在某个值之后检索字符串中的所有记录,java,string,loops,Java,String,Loops,我希望检索“xnum=”之后和“、”分隔符之前的所有值。例如,在下面的字符串中,我想检索值“zjdb”和“2jdb”,并按照找到它们的顺序将它们存储在数组中。我知道这是一个非常随意的要求,但不幸的是,这是解决我目前面临的问题的唯一方法 String: "{zjdb={fname=jbdjd, lname=ejdj, xnum=zjdb, email=ejdj}, 2jdb={fname=ij, lname=vji, xnum=2jdb, email=bbb}}" 我知道我需要循环搜索“x”,然

我希望检索“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”,等等,然后在“=”之后得到索引,直到“,”,但我想得太多了,太复杂了,无法得到。我想知道是否有人知道一个简单的解决方法。。?非常感谢。您可以使用正则表达式查找标记。假设输入格式正确,例如在
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, 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]);
}

下面的代码给出了您想要的输出。但是@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);
String input=“{zjdb={fname=jbdjd,lname=ejdj,xnum=zjdb,email=ejdj},2jdb={fname=ij,lname=vji,xnum=2jdb,email=bbb}”;
字符串[]b=input.split(“,”);
List List=Arrays.stream(b).filter(s->s.contains(“xnum=”).collect(Collectors.toList());
List finalList=new ArrayList();
用于(字符串s:列表){
字符串x=s.replace(“xnum=”,“”);
最后添加(x);
}
System.out.println(finalList);

您是否可以控制此字符串的外观?因为这非常接近于有效的JSON,而且有大量的库可以解析JSON。你必须解析字符串。正则表达式在这里不起作用,因为您使用的是嵌套数据。不幸的是,您发布的对象格式不是我所知道的任何类型的标准对象格式(最接近的是JSON)。要么您必须编写自己的解析器,要么在线查找某种Java toString()解析器。如果您在映射对象转换为该字符串之前能够访问该对象,这将使这个问题变得更容易。或者,如果您可以访问转换逻辑,请使用JSON转换器,然后解析您端的JSON字符串。他所指的
不是紧接
xnum
值之后的逗号,而是分隔
zjdb
2jdb
条目的逗号。正则表达式在这里不起作用。@mario_sunny问题中提到:要检索值“zjdb”和“2jdb”,可以使用上述代码。用正则表达式解析JSON是错误的,但目前OP没有提供更多的上下文。我还将包含
}
作为搜索值的结尾,以防万一。。。