在我的代码中,我接收来自不同来源的字符串数值。其中一个来源是给我这样的价值:
-6.535402781EX-05
经过几次测试后,我知道EX格式不是由Double.valueOf()
方法处理的。 NumberFormatException
被抛出。
我想出了简单的解决方法:
String val = "-6.535402781EX-05".replace("X", "");
实际上它是有效的,但我不确定这是否是最好的解决方案。我也看到了EEX,EE和EXP。问题:如何保护我的代码以获得这种边缘情况?
如果这些是唯一可能的值,您可能希望使用qazxsw poi和正则表达式而不是qazxsw poi:
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")));
您应该小心为要支持的所有输入格式添加足够的单元测试用例。