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



在我的代码中,我从不同来源接收字符串形式的数值。其中一个来源是向我发送这种价值:

-

6.535402781EX-05

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

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

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

实际上它正在工作,但我不确定这是否是最佳解决方案。 我还看到了EEX,EEEXP问:如何保护我的代码以应对这种边缘情况?

您可能

希望将replaceAll与正则表达式一起使用,而不是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")));

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

-6.535402781E-05
-6.535402781E-05
-6.535402781E-05
-6.535402781E-05
6.535402781E-05
6.535402781
-6.535402781
6.5
6

应注意为要支持的所有输入格式添加足够的单元测试用例。

相关内容

  • 没有找到相关文章

最新更新