从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()
。
-
解析子字符串(由空格包围)
-
使用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.]")
并过滤掉非空元素。 但是,不属于数字的句点字符将为您提供帮助。 无论您采用何种解决方案,都要考虑是否有任何情况可以解决问题。