我正在使用一个NumberFormat
实例来使用默认语言环境解析文本。
如果字符串不是有效的数值,我必须返回 0。问题在于 parse 方法,根据 Javadocs:
从给定字符串的开头解析文本以生成一个数字。该方法可能不会使用给定字符串的整个文本。
所以,如果我解析(我使用的是意大利语语言环境)“BAD 123,44”,我会正确地得到一个 ParseException 并返回 0,但是如果我解析“123,44 BAD”,我会得到一个值 123.44,而我必须在这种情况下返回 0。更糟糕的是,如果我解析“123.44 BAD”,我得到的值是 12344!
class RateCellReader {
public static final NumberFormat NUMBER_FORMAT =
NumberFormat.getNumberInstance(Locale.getDefault());
...
try {
number = NUMBER_FORMAT.parse(textValue);
} catch (ParseException e) {
number = 0;
}
...
}
如何准确解析文本,或检查文本是否正确表示默认语言环境中的数字?
编辑:
受到@yomexzo 链接的响应的启发,我改变了我的代码,如下所示:
class RateCellReader {
public static final NumberFormat NUMBER_FORMAT =
NumberFormat.getNumberInstance(Locale.getDefault());
...
ParsePosition pos = new ParsePosition(0);
number = NUMBER_FORMAT.parse(textValue,pos);
if (textValue.length() != pos.getIndex())
number = 0;
...
}