从String中解析多个双精度数

时间:2012-02-21 16:49:19

标签: java string parsing numbers double

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

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

感谢。

4 个答案:

答案 0 :(得分:7)

您可以搜索following regex

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

然后在每场比赛中使用Double.parseDouble()

答案 1 :(得分:3)

使用适当的正则表达式(如此代码或其他帖子)解析双打后,迭代以将匹配的匹配项添加到列表中。在这里,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 );
}

答案 2 :(得分:1)

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

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

  3. 这是一个例子,使用“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: how to parse double from regex

答案 3 :(得分:0)

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

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

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

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