gpt4 book ai didi

java - 在 Java 中强制 Number 将整数字符串解析为 Double

转载 作者:行者123 更新时间:2023-11-30 05:34:16 25 4
gpt4 key购买 nike

如何将一组数字字符串解析为通用数组?我的整个问题可以简化为以下内容:

static <T extends Number> T[] parseBulk(String bulk, Class<T> type) throws ParseException {
NumberFormat numberFormat = NumberFormat.getInstance();
numberFormat.setParseIntegerOnly(false);

String[] elements = bulk.split(";");
T[] result = (T[])Array.newInstance(type, elements.length);
for (int i= 0; i< elements.length; i++)
result[i] = (T)numberFormat.parse(itemElements[i]); // here it crashes
// result[i] = type.cast(numberFormat.parseObject(itemElements[i])); // does not work either
return result;
}

...

Double[] shouldBeDoubles = parseBulk("15.5;10", Double.class);

看起来 Number 通过给定字符串的内容确定结果类型,这会产生“15.5”的 Double 和“10”的 Long。

然后它在尝试将 Long 转换为 T(即 Double)时愉快地崩溃了。

谢谢,

更新:在源代码中添加了 numberFormat。对不起:)

最佳答案

NumberFormat.parse(String source) 返回一个 Number。返回实例的运行时类型可以是 Number 的任何子类,因此如果它返回 Long,则无法将其转换为 Double,如您所知。

如果您想强制将String转换为数字类型,您可以将解析器Function传递给该方法:

static <T extends Number> T[] parseBulk(String bulk, Class<T> type, Function<String,T> parser) {
String[] elements = bulk.split(";");
T[] result = (T[])Array.newInstance(type, elements.length);
for (int i= 0; i< elements.length; i++) {
result[i] = parser.apply(elements[i]);
}
return result;
}

并调用它,例如:

Double[] shouldBeDoubles = parseBulk("15.5;10", Double.class,Double::valueOf);

这将输出:

[15.5, 10.0]

关于java - 在 Java 中强制 Number 将整数字符串解析为 Double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56921204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com