在字符串中查找浮点数

时间:2013-12-20 02:50:50

标签: android regex matcher

如何在字符串中找到多个浮点数?

这是我在SO中使用的代码,但只能获得一个浮点数。

public void getPattern(View v){
    String s = "http://maps.google.com/maps?f=q&hl=en&q=04.445560,100.424200&ie=UTF8&z=16&iwIoc=addr&om=1speed:000.0&imei=1234567564";
    Pattern p = Pattern.compile("\\d+\\.\\d+");
    Matcher m = p.matcher(s);
    if (m.find()) {
        test.setText(m.group(0));
    } else{
        test.setText("No float");
    }
}

我需要从字符串中获取另一个浮点数,但无法理解正则表达式pattern.compile选项。此代码仅获取第一个浮点数04.445560。我无法获得其他latlong数据。

5 个答案:

答案 0 :(得分:0)

您需要将if更改为while

为了让它做你想做的事我想象设置test.setText需要修改以追加字符串。

test.setText(test.getText() + m.group(0));

或使用StringBuffer类似的东西。

答案 1 :(得分:0)

我认为您的代码中只有一个小错误,您只需将if更改为while即可获得字符串中float值的所有出现提供。

public void getPattern(View v){
    String s = "http://maps.google.com/maps?f=q&hl=en&q=04.445560,100.424200&ie=UTF8&z=16&iwIoc=addr&om=1speed:000.0&imei=1234567564";
    Pattern p = Pattern.compile("\\d+\\.\\d+");
    Matcher m = p.matcher(s);
    while (m.find()) {
        test.setText(m.group());
    } else{
        test.setText("No float");
    }
}

此外,如果您想了解开始和结束索引,可以使用m.start()m.end()函数来获取它。

答案 2 :(得分:0)

之前我没有使用PatternMatcher,但查看代码,您应该循环使用m.group(i)获取所有浮点数。

类似的东西:

int i = 0;
while(m.find()){
    m.group(i);
    i++;
}

编辑:

查看了Matcher javadoc后,您可以使用groupCount来获取找到表达式的时间。

int length = m.groupCount();
String temp="";
for (int i = 0; i < length; i++) {
    Log.i("Float found:" + (i+1), m.group(i));
    temp+= "  " + m.group(i)
}
if (0 < length) {
    test.setText(temp);
} else{
    test.setText("No float");
}

答案 3 :(得分:0)

您的正则表达式正确

只有在特定条件为真时,if语句才会执行某段代码。 <{1}}语句在特定条件为真时不断执行语句块。

示例:

while

输出

String s  = "http://maps.google.com/maps?f=q&hl=en&q=04.445560,100.424200&ie=UTF8&z=16&iwIoc=addr&om=1speed:000.0&imei=1234567564";
Pattern p = Pattern.compile("\\d+\\.\\d+");
Matcher m = p.matcher(s);
while (m.find()) {
   System.out.println(m.group());
}

答案 4 :(得分:0)

谢谢大家...... 根据提供的解决方案,我用以下代码解决了我的问题。

        //String s = "http://maps.google.com/maps?f=q&hl=en&q=05.445560,100.424200&ie=UTF8&z=16&iwIoc=addr&om=1speed:000.0&imei=3556890194";
 Pattern p = Pattern.compile("\\d+\\.\\d+");
    Matcher m = p.matcher(s);
    int i =0;
    Float n[] = new Float[4];
        while (m.find()) {
               System.out.println(m.group());
               n[i]= Float.parseFloat(m.group());
               i++;
            }   
float lat = n[0];
float long = n[1];