如何在此字符串中提取键的值

时间:2019-05-03 11:15:29

标签: java

我有以下字符串,我需要使用java访问CN和O值, 我该怎么办?

jQuery2038205_146921({"name":"cn=cdf,o=abc","expiration":"656"});

2 个答案:

答案 0 :(得分:2)

您可以使用以下正则表达式来捕获组1和组2中的值。

Java代码

String s = "jQuery2038205_146921({\"name\":\"cn=cdf,o=abc\",\"expiration\":\"656\"});";
Pattern p = Pattern.compile("\\bcn=([^,\"]+),o=([^,\"]+)");
Matcher m = p.matcher(s);
if (m.find()) {
    System.out.printf("CN: %s, O: %s", m.group(1), m.group(2));
}

打印

CN: cdf, O: abc

另一方面,如果两个字符串的顺序可以不同,则需要像这样使用两个正则表达式,

String s = "jQuery2038205_146921({\"name\":\"cn=cdf,o=abc\",\"expiration\":\"656\"});";
Pattern p1 = Pattern.compile("\\bcn=([^,\"]+)");
Pattern p2 = Pattern.compile("\\bo=([^,\"]+)");
Matcher m1 = p1.matcher(s);
if (m1.find()) {
    System.out.println("CN: " + m1.group(1));
}
Matcher m2 = p2.matcher(s);
if (m2.find()) {
    System.out.println("O: " + m2.group(1));
}

打印

CN: cdf
O: abc

答案 1 :(得分:1)

如果可以使用JSON解析器,请执行此操作。如果没有,那么这里有些线也可能起作用:

String input = "jQuery2038205_146921({\"name\":\"cn=cdf,o=abc\",\"expiration\":\"656\"});";
String cn = input.replaceAll(".*\\bcn=([^\",]+).*", "$1");
String o = input.replaceAll(".*\\bo=([^\",]+).*", "$1");
System.out.println(cn);
System.out.println(o);

cdf
abc