Java从字符串解析为数字但推断类型

问题描述 投票:1回答:1

我正在尝试编写一个将字符串转换为数字的泛型方法。我可以使用哪种API来完成此操作。

private <T extends Number> T parseFromString(String str) {
   // convert str to number
}

然后打电话:

   parseFromString<Double>("120.0");

   parseFromString<Integer>("11");
java string
1个回答
0
投票

不需要使用泛型,我只会使用:

private static Number parseFromString(String str) throws NumberFormatException {
    if (str.matches("\\d+")) {
        return Integer.valueOf(str);
    } else if (str.matches("[-+]?[0-9]*\\.?[0-9]+")) {
        return Double.valueOf(str);
    }
    throw new NumberFormatException("Number not correct");
}

输出

System.out.println(parseFromString("11"));    // 11
System.out.println(parseFromString("112.3")); // 112.3
System.out.println(parseFromString("some not correct strings")); // Number not correct

或者正如@shmosel在评论中提到的,你可以使用:

private static Number parseFromString(String str) throws ParseException {
    return NumberFormat.getInstance().parse(str);
}

在此解决方案中,您可能会失去精度,因此可能需要使用区域设置,如下所示:

private static Number parseFromString(String str) throws ParseException {
    return NumberFormat.getInstance(Locale.CANADA).parse(str);
}
© www.soinside.com 2019 - 2024. All rights reserved.