有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

由于性能问题,java双精度字符串替代方案

需要帮助寻找替代方案。这是我在环境中运行的当前代码。看起来它影响了我的应用程序的性能,速度不够快。我正在考虑试一试的方法。它会起作用吗?或者有更好的替代方案可以建议您将double转换为字符串

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) 个答案

  1. # 1 楼答案

    我认为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;
    }
    
  2. # 2 楼答案

    很难提出替代方案,因为我们不知道您希望数字的格式

    但是,每次执行这一行时:

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

    您正在重新编译正则表达式。这将相当缓慢

    编译一次,存储在字段中:

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

    然后在以下条件下使用:

    if (PATTERN.matcher(string).matches()) {