Строка с научной нотацией EX, EEX, EXP или EE для удвоения - PullRequest
0 голосов
/ 27 марта 2019

В моем коде я получаю числовые значения в виде строк из разных источников.Один из источников посылает мне такие значения:

-6.535402781EX-05

После нескольких тестов я знаю, что формат EX не обрабатывается методом Double.valueOf().NumberFormatException брошено.

Я нашел простой способ:

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

На самом деле это работает, но я не уверен, что это лучшее решение.Я видел также EEX , EE и EXP .Вопрос: Как защитить мой код для такого рода крайних случаев?

Ответы [ 2 ]

1 голос
/ 27 марта 2019

Вы можете использовать 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"));
}
1 голос
/ 27 марта 2019

Может ли простое регулярное выражение помочь вам?Сначала вы можете преобразовать различные форматы ввода в ваш известный формат ввода, который может быть обработан с помощью 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

Вы должны быть осторожны, чтобы добавить достаточное количество тестов для всех входных форматов, которые хотите поддерживать.

...