为啥 NumberFormat 中需要以下 2 种方法?
Posted
技术标签:
【中文标题】为啥 NumberFormat 中需要以下 2 种方法?【英文标题】:Why is there a need of the 2 following methods in NumberFormat?为什么 NumberFormat 中需要以下 2 种方法? 【发布时间】:2013-08-26 10:42:17 【问题描述】:我看到NumberFormat 有两个方法非常相似:
1)
abstract Number parse(String source, ParsePosition parsePosition)
如果可能,返回一个 Long(例如,在 [Long.MIN_VALUE, Long.MAX_VALUE] 并且没有小数),否则为 Double。
2)
Object parseObject(String source, ParsePosition pos)
从字符串中解析文本以生成数字。
在存在parse(s,ParseIndex)
的情况下,parseObject(..)
需要转换为所需的输出吗?
我知道第一种方法会抛出 ParseException
而后者不会。
只是想知道为什么需要这两种非常相似的方法。
提前致谢。
【问题讨论】:
【参考方案1】:关于 JDK 最常听到的抱怨之一是为什么不能使用 Integer.parseInt
和类似方法来验证字符串,而不涉及昂贵的异常机制。 NumberFormat
似乎通过提供一种可以通过返回 null
来表示失败的方法来回答该投诉。
【讨论】:
搞笑的是子类DecimalFormat parse(String, ParsePosition)的同一个方法不抛出ParseException。 +1 以获得很好的答案。虽然我个人没有问这个问题,但你很好地解释了这个问题,让我想到为什么“我”会想要使用它。 @Rollerball 请注意,parse(String,ParsePosition)
、parse(String)
和 parseObject(String,ParsePosition)
都在 NumberFormat
类中。那些接受ParsePosition
的方法不会抛出,它们使用这个对象来指示解析错误的位置。以上是关于为啥 NumberFormat 中需要以下 2 种方法?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Intl.NumberFormat 不适用于 Safari 和 Firefox 中的单位?
Java NumberFormat 舍入模式,为啥一半格式 1.015 到 1.01 而不是 1.02
使用 NumberFormat 格式化数字的 FieldPosition