Java在String中搜索浮点数

让我们说我有这样的字符串:

eXamPLestring> 1.67 >> ReSTOfString

我的任务是从上面的字符串中仅提取1.67。

我认为正则表达式是有用的,但我无法弄清楚如何编写propper表达式。

如果要从String提取所有IntFloat ,可以按照我的解决方案:

 private ArrayList parseIntsAndFloats(String raw) { ArrayList listBuffer = new ArrayList(); Pattern p = Pattern.compile("[0-9]*\\.?[0-9]+"); Matcher m = p.matcher(raw); while (m.find()) { listBuffer.add(m.group()); } return listBuffer; } 

如果你想解析负值 ,可以添加[-]? 对于这样的模式:

  Pattern p = Pattern.compile("[-]?[0-9]*\\.?[0-9]+"); 

如果你还想设置,你可以添加一个分隔符 ,? 对于这样的模式:

  Pattern p = Pattern.compile("[-]?[0-9]*\\.?,?[0-9]+"); 

要测试模式,您可以使用此在线工具: http : //gskinner.com/RegExr/

注意 :对于这个工具,如果您正在尝试我的示例,请记住unescape(您只需要取下其中一个\

您可以尝试使用正则表达式匹配数字

 \\d+\\.\\d+ 

这可能看起来像

 Pattern p = Pattern.compile("\\d+\\.\\d+"); Matcher m = p.matcher("eXamPLestring>1.67>>ReSTOfString"); while (m.find()) { Float.parseFloat(m.group()); } 
  String s = "eXamPLestring>1.67>>ReSTOfString>>0.99>>ahgf>>.9>>>123>>>2323.12"; Pattern p = Pattern.compile("\\d*\\.\\d+"); Matcher m = p.matcher(s); while(m.find()){ System.out.println(">> "+ m.group()); } 

只给花车

 >> 1.67 >> 0.99 >> .9 >> 2323.12 

以下是如何在一行中完成的,

 String f = input.replaceAll(".*?([\\d.]+).*", "$1"); 

如果你真的想要一个float ,这就是你如何在一行中做到这一点:

 float f = Float.parseFloat(input.replaceAll(".*?([\\d.]+).*", "$1")), 

你可以使用正则表达式\d*\.?,?\d*这适用于像1.0和1,0这样的浮点数

看看这个链接 ,他们还解释了构建这样一个正则表达式时需要记住的一些事项。

[-+]?[0-9]*\.?[0-9]+

示例代码:

 String[] strings = new String[3]; strings[0] = "eXamPLestring>1.67>>ReSTOfString"; strings[1] = "eXamPLestring>0.57>>ReSTOfString"; strings[2] = "eXamPLestring>2547.758>>ReSTOfString"; Pattern pattern = Pattern.compile("[-+]?[0-9]*\\.?[0-9]+"); for (String string : strings) { Matcher matcher = pattern.matcher(string); while(matcher.find()){ System.out.println("# float value: " + matcher.group()); } } 

输出:

 # float value: 1.67 # float value: 0.57 # float value: 2547.758