2012-05-03 74 views
0

我有一個很長的字符串,我想解析並檢索一個值。 我正在考慮使用模式,但在這方面我有點生疏。android,從長字符串提取值

這是我感興趣的字符串的一部分:

...下沉將是44%的成功...

字 '下沉' 是關鍵字。我期望得到的百分比值(在這種情況下爲44%)

什麼是最好的方式? 謝謝。

**「將會」的字詞可能會改變。

+0

只有兩個選項,stringtokenize/split(或)表達式。你需要選擇其中之一。 – kosa

回答

2

這裏是一個正則表達式的解決方案:

String str = "...sinking will be 44% successful..."; 
Pattern p = Pattern.compile("sinking will be (\\S*) successful"); 
Matcher m = p.matcher(str); 
if (m.find()) { 
    String percent = m.group(1); 
} 

如果你只想百分比數字值,你的模式改成這樣:

"sinking will be (\\d*)% successful" 

如果前述任文是無關緊要的,你只是要搶%的行使用這種模式:

"(\\d*%)" 

編輯:如果您的關鍵字是「下沉」,並希望這個詞後的第一個百分比值,這將是你的模式:

"sinking(?:[\\w\\s]*) (\\d+%)" 
+0

,謝謝傑森,但是在這篇文章前後有一些其他的百分比,所以我不認爲這會起作用 – Ray

+0

你知道嗎?有多少?如果沒有,那麼這個百分比究竟是什麼意思呢?你會如何選擇這個比例? –

+0

重讀你的問題,看看我的編輯。 –

2
如果總是這樣的字符串

簡單的解決方案:

String splitMe = "...sinking will be 44% successful..."; 
String strPercents = splitMe.split(" ")[3]; 
System.out.println(strPercents);//test output 

否則:良好的正則表達式的ressource http://www.vogella.com/articles/JavaRegularExpressions/article.html#examples

+0

謝謝托馬斯。但我認爲這不會起作用(是吧?),因爲這只是我感興趣的部分。在此之前和之後有很多其他的東西,因此... – Ray

1

只要你知道文本將始終以「下沉會」開始, a%將永遠在那裏這將工作,無論周圍的文字

String s = "more text more text sinking will be 44% successful more text"; 
String find = "sinking will be "; 
int findIndex = s.indexOf(find) + find.length(); 
int pctIndex = s.indexOf("%", findIndex); 

String result = s.substring(findIndex , pctIndex); 
+0

不幸的是只有「沉沒」這個詞是肯定會在那裏。 – Ray

+0

我剛剛注意到你編輯你的帖子,文本「將」可能並不總是在這種情況下,這是行不通的,你最好的選擇是使用正則表達式 – dymmeh