在Java中从字符串中提取科学数字

时间:2015-02-26 14:07:50

标签: java regex

我正在尝试从字符串中提取科学数字。类似的东西:

String str =“值的名称1.111E-11下一个名称= 444.4”;

我想要的结果如下: 结果:[1.111E-11,444.4]

请建议更好的解决方案。

2 个答案:

答案 0 :(得分:2)

您可以使用扫描仪:

String str = "Name of value 1.111E-11 Next Name= 444.4";

Scanner scanner = new Scanner(str);

while (scanner.hasNext()) {
    if (scanner.hasNextDouble()) {
        System.out.println(scanner.nextDouble());
    } else {
        scanner.next();
    }
}

将打印:

1.111E-11
444.4

默认情况下,扫描仪使用空格分隔符 - 这意味着它会读取单词。 next()将下一个单词作为String返回,nextDouble()获取下一个单词并尝试将其解析为double,因此如果单词不是数字,它将抛出异常。这就是为什么上面的示例使用hasNextDouble()检查下一个单词是否为数字的原因,如果不是,则只调用next()并忽略结果。

答案 1 :(得分:1)

您也可以使用以下正则表达式。

String s = "Name of value 1.111E-11 Next Name= 444.4";
Matcher m = Pattern.compile("(?<!\\S)\\d\\S*").matcher(s);
while(m.find())
{
System.out.println(m.group());
}

<强>输出:

1.111E-11
444.4