从String中解析多个双精度数

我想知道如何从字符串中解析几个双数,但字符串可以混合,例如: String s = "text 3.454 sometext5.567568more_text"

标准方法( Double.parseDouble )不合适。 我试图使用isDigit方法解析它,但是如何解析其他字符和.

谢谢。

在使用适当的正则表达式(如此代码或其他post)解析双打后,迭代以将匹配的匹配项添加到列表中。 在这里,您可以在代码中的任何其他位置使用myDoubles

 public static void main ( String args[] ) { String input = "text 3.454 sometext5.567568more_text"; ArrayList < Double > myDoubles = new ArrayList < Double >(); Matcher matcher = Pattern.compile( "[-+]?\\d*\\.?\\d+([eE][-+]?\\d+)?" ).matcher( input ); while ( matcher.find() ) { double element = Double.parseDouble( matcher.group() ); myDoubles.add( element ); } for ( double element: myDoubles ) System.out.println( element ); } 

您可以搜索以下正则表达式 :

 Pattern.compile("[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?") 

然后在每个匹配项上使用Double.parseDouble()

  1. 解析子字符串(由空格包围)

  2. 使用String.ParseDouble()来获取数值

这是一个例子,使用“split()”来解析(有很多选择):

 // http://pages.cs.wisc.edu/~hasti/cs302/examples/Parsing/parseString.html String phrase = "the music made it hard to concentrate"; String delims = "[ ]+"; String[] tokens = phrase.split(delims); 

这是第二种选择:

Java:如何从正则表达式中解析double

您需要考虑使用哪种算法来执行此操作,因为它并不完全明显。 如果子字符串是asdf.1asdf ,那么应该将其解析为十进制值0.1还是仅为1

此外,某些嵌入数字是否可以为负数? 如果不是这样大大简化了搜索空间。

我认为aix在正确的轨道上使用正则表达式,因为一旦你想出一个算法,这听起来像状态机的工作类型(扫描输入直到你找到一个数字或任选的-.然后查找下一个“非法”字符并正常解析子字符串)。

这是你必须考虑的边缘情况 – 例如,没有负数你几乎可以使用s.split("[^0-9.]")并过滤掉非空元素。 但是,不属于数字的句点字符将为您提供帮助。 无论您采用何种解决方案,都要考虑是否有任何情况可以解决问题。