如何在字符串中找到多个浮点数?
这是我在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数据。
答案 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)
之前我没有使用Pattern
或Matcher
,但查看代码,您应该循环使用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];