java - 带有 EX、EEX、EXP 或 EE 科学记数法的字符串加倍
问题描述
在我的代码中,我接收来自不同来源的字符串形式的数值。来源之一是向我发送这种价值:
-6.535402781EX-05
经过几次测试,我知道EX格式不是由Double.valueOf()
方法处理的。NumberFormatException
被抛出。
我想出了简单的解决方法:
String val = "-6.535402781EX-05".replace("X", "");
实际上它正在工作,但我不确定这是否是最佳解决方案。我还看到了EEX、EE和EXP。问题:如何在这种边缘情况下保护我的代码?
解决方案
一个简单的正则表达式会为您解决问题吗?您可以先将不同的输入格式转换为您可以处理的已知输入格式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
您应该小心为要支持的所有输入格式添加足够的单元测试用例。