如何使用正则表达式并将结果分配给Android中的变量?

时间:2010-05-21 02:14:14

标签: java android regex

我有一个名为s_Result的字符串,它将从Internet解析。格式可以是"Distance: 2.8km (about 9 mins)",有4个变量f_Distancem_DistanceUnitf_timeEstm_timeEstUnit

我的问题是如何解析s_Result并将2.8km9mins分配到f_Distance,{{1} },m_distanceUnitf_timeEst分别使用正则表达式?

我尝试在RegEx Tester中使用m_timeEstUnit,结果显示找到了2个匹配项,但如果我在Android代码中使用"\d+(\.\d+)?",则表示没有匹配!

任何可能出错的建议?

3 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:0)

  

我尝试在RegEx Tester中使用"\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
}

那就是说,你考虑过写一个解析器吗?

答案 2 :(得分:0)

这与Java完全相同。

实际上,大多数Android问题与Android本身无关,而是与Java编程有关。在发布新的“Android”问题之前,请尝试搜索更多一般性问题。