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

Java中从字符串中提取科学数字,java,regex,Java,Regex,我试图从字符串中提取科学数字。比如: String str=“值的名称1.111E-11下一个名称=444.4” 我想要的结果是: 结果:[1.111E-11444.4] 请建议更好的解决方案。您可以使用扫描仪: String str = "Name of value 1.111E-11 Next Name= 444.4"; Scanner scanner = new Scanner(str); while (scanner.hasNext()) { if (scanner.hasN

我试图从字符串中提取科学数字。比如:

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

我想要的结果是: 结果:[1.111E-11444.4]


请建议更好的解决方案。

您可以使用扫描仪:

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()
以字符串形式返回下一个单词,
nextDouble()
获取下一个单词并尝试将其解析为double,因此如果单词不是数字,它将抛出异常。这就是为什么上面的示例使用
hasNextDouble()
检查下一个单词是否是数字,如果不是,它只调用
next()
并忽略结果。

您可以使用scanner进行此操作:

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()
以字符串形式返回下一个单词,
nextDouble()
获取下一个单词并尝试将其解析为double,因此如果单词不是数字,它将抛出异常。这就是为什么上面的示例使用
hasNextDouble()
检查下一个单词是否是数字,如果不是,它只调用
next()
并忽略结果。

您可以使用scanner进行此操作:

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()
以字符串形式返回下一个单词,
nextDouble()
获取下一个单词并尝试将其解析为double,因此如果单词不是数字,它将抛出异常。这就是为什么上面的示例使用
hasNextDouble()
检查下一个单词是否是数字,如果不是,它只调用
next()
并忽略结果。

您可以使用scanner进行此操作:

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()
以字符串形式返回下一个单词,
nextDouble()
获取下一个单词并尝试将其解析为double,因此如果单词不是数字,它将抛出异常。这就是为什么上面的示例使用
hasNextDouble()
检查下一个单词是否是数字,如果不是,它只调用
next()
并忽略结果。

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

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());
}

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

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());
}

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

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());
}

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

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());
}

在提问之前,请表现出一些努力。你试过什么?为什么不起作用?请在提问前表现出一定的努力。你试过什么?为什么不起作用?请在提问前表现出一定的努力。你试过什么?为什么不起作用?请在提问前表现出一定的努力。你试过什么?为什么不起作用?贴一张。