我正在尝试从字符串中提取科学数字。类似的东西:
String str =“值的名称1.111E-11下一个名称= 444.4”;
我想要的结果如下: 结果:[1.111E-11,444.4]
请建议更好的解决方案。
答案 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