2010-05-21 30 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”问题之前,请尝试搜索更一般的问题。

相关问题