-1

私は自分のアプリケーションで必要な特定のパラメータを文字列で検索するのに大きな問題を抱えています。これを行う唯一の実際の方法は正規表現を使用することですが、それらは私に大きな頭痛の種を与えています!私は通常自分でそれらを書くことはありませんが、他のウェブサイトからそれらを取り除きますが、私が必要とするものは含まれるほど単純ではありません:(

文字列は次のとおりです。

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

spnこの文字列から、、、mccおよびを抽出する必要がありmncます。残念ながら、api i呼び出しは、一部のリクエストに対して文字列上のこれらの場所を変更するため、文字列のインデックス作成が困難になります。たとえば、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

Patternおよびを使用したソリューション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 に答える