2010-05-21 68 views
0

我有一個名爲s_Result的字符串,它將從互聯網上解析。格式可以是"Distance: 2.8km (about 9 mins)",並且有4個變量,它們是f_Distance,m_DistanceUnit,f_timeEst,m_timeEstUnit如何使用正則表達式並將結果賦予Android中的變量?

我的問題是如何解析s_Result和分配2.8km9minsf_Distancem_distanceUnitf_timeEstm_timeEstUnit分別使用正則表達式?

我試過在RegEx Tester中使用"\d+(\.\d+)?",結果顯示找到了2個匹配項,但是如果我在Android代碼中使用"\\d+(\\.\\d+)?",則表明沒有匹配!

有什麼建議可能會出錯?

回答

6

這樣的事情?

String s_Result="Distance: 2.8km (about 9 mins)"; 

//Distance parsing 
Pattern p = Pattern.compile("Distance: (\\d+(\\.\\d+)?)(.*?)\\b"); 
Matcher m = p.matcher(s_Result); 
if(m.find()){ 
    MatchResult mr=m.toMatchResult(); 
    f_Distance=mr.group(1);//2.8 
    m_DistanceUnit=mr.group(3);//km 
} 

//Time parsing 
p = Pattern.compile("about (\\d+(\\.\\d+)?) (.*)\\b"); 
m = p.matcher(s_Result); 
if(m.find()){ 
    MatchResult mr=m.toMatchResult(); 
    f_timeEst=mr.group(1);//9 
    m_timeEstUnit=mr.group(3);//min 
} 

這裏是給你的另一種選擇,以配合更靈活的格式:

String s_Result="Distance: 2.8km (about 9 mins)"; 
Pattern p = Pattern.compile("(\\d+(\\.\\d+)?) ?(\\w+?)\\b"); 
Matcher m = p.matcher(s_Result); 
while(m.find()){ 
    MatchResult mr=m.toMatchResult(); 
    String value=mr.group(1);//2.8 and 9 come here 
    String units=mr.group(3);//km and mins come here 
} 
+0

這正是我想要的! 我怎麼傻了,忘了用''\ b「'...... 非常感謝你^^ – ChengYing 2010-05-21 04:34:09

0

我試圖用正則表達式中測試"\d+(\.\d+)?"和結果顯示發現2場比賽,但如果我在Android的代碼中使用"\\d+(\\.\\d+)?",它表明沒有比賽!

也許你是使用String#matches()Matcher#matches()這將匹配在整個字符串。正則表達式實際上是"^\\d+(\\.\\d+)?$"。改用Matcher#find()代替。

String s = "Distance: 2.8km (about 9 mins)"; 
Matcher m = Pattern.compile("\\d+(\\.\\d+)?").matcher(s); 
while (m.find()) { 
    System.out.println(m.group(0)); // 2.8 and 9 
} 

這就是說,你有沒有考慮過編寫一個解析器?

+0

感謝您的回覆! 你說得對,我正在使用'Matcher.matches()'。而你的代碼工作正常! 我確實考慮寫一個解析器,但也存在一些問題。 主要問題是我無法確定's_Result'的格式。我所知道的是在刺中必須存在2組數據,其中包括數字和它的單位。 你有什麼想法如何獲得單位後面的數字? 非常感謝! – ChengYing 2010-05-21 02:48:09

0

這絕對是一樣的Java。

真的,大部分Android問題都與Android本身無關,而是與Java編程有關。在發佈新的「Android」問題之前,請嘗試搜索更一般的問題。

相關問題