-1

我在为我的应用程序中需要的特定参数搜索字符串时遇到了很大的问题,我假设唯一真正的方法是使用正则表达式,但是它们让我非常头疼!我通常不自己写它们,但把它们从其他网站上取下来,但是我需要的东西不够简单,不能被包括在内:(

这是字符串:

10 50 u E2U+pstn:tel "!^(.*)$!tel:\\1;spn=42180;mcc=234;mnc=33!" .

我需要从这个字符串中提取spn,mcc和 the 。mnc不幸的是,我调用的 api 更改了某些请求在字符串上的位置,这使得索引字符串变得困难。我真的需要列出我需要获取 spn= 的内容,然后继续阅读数字,但我尝试的一切都不起作用。

4

2 回答 2

2

我不会使用正则表达式,而只是拆分:

String[] tokens = str.split(";");
for (int i=0; i<tokens.length; i++) {
   if (tokens[i].startsWith("spn=")) {
       spn = Integer.parseInt(tokens[i].substring("spn=".length()));
   }
}

当然,您可以对此进行一点客观化,或者使用"spn=".

于 2012-10-16T08:13:12.550 回答
1

使用Patternand的解决方案Matcher

String s = "10 50 u E2U+pstn:tel \"!^(.*)$!tel:\\\\1;spn=42180;mcc=234;mnc=33!\"";
Pattern p = Pattern.compile("^.*spn=([0-9]+);mcc=([0-9]*);mnc=([0-9]*)!.*$");
Matcher matcher = p.matcher(s);
matcher.matches(); // true
String spn = matcher.group(1); // 42180
String mcc = matcher.group(2); // 234
String mnc = matcher.group(3); // 33

编辑:您也可以使用命名捕获组

Pattern p =
  Pattern.compile("^.*spn=(?<spn>[0-9]+);mcc=(?<mcc>[0-9]*);mnc=(?<mnc>[0-9]*)!.*$");
Matcher matcher = p.matcher(s);
matcher.matches(); // true
String spn = matcher.group("spn");
String mcc = matcher.group("mcc");
String mnc = matcher.group("mnc");
于 2012-10-16T08:21:51.737 回答