2012-10-16 87 views
-1

我在搜索字符串時遇到了很大的問題,需要在我的應用程序中使用特定的參數,我假設唯一真正的方法是使用正則表達式,但他們給我一個巨大的頭痛!我通常不寫他們自己,而是讓他們把其他網站但我需要的是不夠簡單,包括:(在字符串上的正則表達式搜索

這裏是字符串:

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

我需要提取spnmccmnc。不幸的是,我調用的api改變了字符串中這些字符串的位置,導致索引字符串變得困難。我真的需要列出我需要的東西來獲取spn =例如,然後關注關閉並讀取數字,但是我嘗試的所有東西都不能使用。

+0

爲什麼不學習正則表達式的一點點?構建一個這樣的應該是微不足道的遵循本教程:http://www.regular-expressions.info/tutorial.html –

回答

1

使用PatternMatcher A液:

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 

編輯:您可以使用named-capturing groups,太:

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"); 
+1

我不認爲這會工作,如果參數的順序改變(*「不幸的是我呼籲的API改變了這些字符串的位置」*) –

+0

好點。但應該很容易使用三種模式,每種模式一種。 – 2012-10-16 08:37:08

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="

+0

upvoted,一個優秀的soln。 –

相關問題