Альтернатива двойным строкам из-за проблем с производительностью - PullRequest
1 голос
/ 08 ноября 2019

Нужна помощь в поиске альтернативы. Это текущий код, который я запускаю в среде. Похоже, это влияет на производительность моего приложения и не достаточно быстро. Я думаю о методе try-catch. Будет ли это работать или есть лучшая альтернатива, которую вы можете предложить, чтобы преобразовать двойное число в строку?

public static String formatDoubleValue(String string) {

    if (string == null)
        return null;

    if (string.matches("-?\\d+(\\.\\d+)")) {
        //System.out.println(string + " is a Double");
        Double dVal = Double.parseDouble(string);
        //System.out.println("Formatted value: " + NUM_FORMAT.format(dVal));
        return NUM_FORMAT.format(dVal);
    } else {
        //System.out.println(string + " is not a Double");
        return string;
    }
}

public static String formatDoubleValuesixdigit(String string) {

    if (string == null)
        return null;

    if (string.matches("-?\\d+(\\.\\d+)")) {
        //System.out.println(string + " is a Double");
        Double dVal = Double.parseDouble(string);
        //System.out.println("Formatted value: " + NUM_FORMAT.format(dVal));
        return NUM_FORMAT_SIXDIGIT.format(dVal);
    } else {
        //System.out.println(string + " is not a Double");
        return string;
    }
}

Ответы [ 2 ]

2 голосов
/ 08 ноября 2019

Трудно предложить альтернативу, потому что мы не знаем точно, как вы хотите отформатировать числа.

Однако каждый раз, когда вы выполняете эту строку:

if (string.matches("-?\\d+(\\.\\d+)")) {

выперекомпиляция регулярного выражения. Это будет довольно медленно.

Скомпилируйте его один раз, сохраните в поле:

static final Pattern PATTERN = Pattern.compile("-?\\d+(\\.\\d+)");

и затем используйте это в условии:

if (PATTERN.matcher(string).matches()) {
1 голос
/ 08 ноября 2019

Я думаю, Scanner сверх String может дать вам лучшую производительность, как

public static String formatDoubleValuesixdigit(String string) {
    if (string != null) {
        Scanner sc = new Scanner(string);
        if (sc.hasNextDouble()) {
            return NUM_FORMAT_SIXDIGIT.format(sc.nextDouble());
        }
    }
    return string;
}

и

public static String formatDoubleValue(String string) {
    if (string != null) {
        Scanner sc = new Scanner(string);
        if (sc.hasNextDouble()) {
            return NUM_FORMAT.format(sc.nextDouble());
        }
    }
    return string;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...