gpt4 book ai didi

java - NumberFormat Java 的奇怪行为

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:54:25 26 4
gpt4 key购买 nike

我有以下代码来解析一个名为 str 的字符串变量。

NumberFormat formatter = NumberFormat.getInstance();
Number number = formatter.parse(str);

我想捕获当 str 不是数字时抛出的异常,只是为了验证它。我遇到的问题是它并不总是抛出预期的 ParseException。当字符串 str 以数字开头但随后是字符时,它似乎获取字符串的第一个字符并将它们解析为数字。

例如:

  • 如果 str="a10"则抛出 ParseException
  • 如果 str="10a"则没有异常抛出并且 number=10

我不能使用 Double.parseDouble(str),因为 str 可以包含逗号和点,例如 1,000.98,并且此方法无法理解此格式。

为什么会这样?我可以用任何其他方式验证它吗?谢谢

最佳答案

行为并不奇怪,它是设计好的

Parses text from the beginning of the given string to produce a number. The method may not use the entire text of the given string.

你可以像这样使用位置感知解析方法:

public static double parse(String str) throws ParseException {
NumberFormat formatter = NumberFormat.getInstance();
ParsePosition position = new ParsePosition(0);
Number number = formatter.parse(str, position);
if (position.getIndex() != str.length()) {
throw new ParseException("failed to parse entire string: " + str, position.getIndex());
}
return number.doubleValue();
}

关于java - NumberFormat Java 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2266020/

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