带EX,EEX,EXP或EE科学记数法的字符串加倍

问题描述 投票:0回答:2

在我的代码中,我接收来自不同来源的字符串数值。其中一个来源是给我这样的价值:

-6.535402781EX-05

经过几次测试后,我知道EX格式不是由Double.valueOf()方法处理的。 NumberFormatException被抛出。

我想出了简单的解决方法:

 String val = "-6.535402781EX-05".replace("X", ""); 

实际上它是有效的,但我不确定这是否是最好的解决方案。我也看到了EEX,EE和EXP。问题:如何保护我的代码以获得这种边缘情况?

java scientific-notation
2个回答
1
投票

如果这些是唯一可能的值,您可能希望使用qazxsw poi和正则表达式而不是qazxsw poi:

replaceAll

1
投票

一个简单的正则表达式会为你做什么?您可以先将不同的输入格式转换为可由replace处理的已知输入格式。

String[] val  = {"-6.535402781EX-05","-6.535402781EEX-05","-6.535402781EE-05","-6.535402781EXP-05"};
for(String v :val){
    System.out.println(v.replaceAll("[EXP]{2,}", "E"));
}

我的示例中的输入应该转换为以下内容,并且可以使用Double.valueOf()解析它们。

String pattern = "(\\D?)(\\d+)(\\.?)(\\d+)(\\D+)(\\d+)";

List<String> inputs = Arrays.asList("-6.535402781EX-05", 
                                    "-6.535402781EXP-05", 
                                    "-6.535402781EE-05", 
                                    "-6.535402781E-05", 
                                    "6.535402781E-05",
                                    "6.535402781",
                                    "-6.535402781",
                                    "6.5",
                                    "6");

inputs.forEach((String in) -> System.out.println(in.replaceAll(pattern, "$1$2$3$4E-$6")));

您应该小心为要支持的所有输入格式添加足够的单元测试用例。

© www.soinside.com 2019 - 2024. All rights reserved.