我正在使用NumberFormat
实例使用默认语言环境来解析文本。
如果字符串不是有效的数值,我必须返回0.问题是解析方法,根据Javadocs:
从给定字符串的开头解析文本以生成一个 数。该方法可能不会使用给定字符串的整个文本。
所以,如果我解析(我正在使用意大利语语言环境)“BAD 123,44”我正确得到ParseException并返回0,但如果我解析“123,44 BAD”,我得到的值为123.44,而在这种情况下我必须返回0。 更糟糕的是,如果我解析“123.44坏”,我得到价值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;
...
}
答案 0 :(得分:2)
这个怎么样
boolean isValid;
try {
Number n = NUMBER_FORMAT.parse(s1);
String s2 = NUMBER_FORMAT.format(n);
isValid = s1.equals(s2);
}catch(ParseException e) {
isValid = false;
}