DecimalFormat 将数字转换为非数字
2022-09-04 21:59:37
使用 DecimalFormat 在使用此类数字时不会给出解析异常:
123轮胎
这显然不是一个真正的数字,并转换为123.0值。如何避免这种行为?
作为旁注,hello123确实给出了一个例外,这是正确的。
谢谢 马塞尔
使用 DecimalFormat 在使用此类数字时不会给出解析异常:
123轮胎
这显然不是一个真正的数字,并转换为123.0值。如何避免这种行为?
作为旁注,hello123确实给出了一个例外,这是正确的。
谢谢 马塞尔
要进行精确解析,您可以使用
public Number parse(String text,
ParsePosition pos)
将 pos 初始化为 0,完成后,它将在使用的最后一个字符之后为您提供索引。
然后,您可以将其与字符串长度进行比较,以确保解析准确。
扩展@Kal的答案,这里有一个实用程序方法,您可以将其与任何格式化程序一起使用以进行“严格”解析(使用apache commons StringUtils):
public static Object parseStrict(Format fmt, String value)
throws ParseException
{
ParsePosition pos = new ParsePosition(0);
Object result = fmt.parseObject(value, pos);
if(pos.getIndex() < value.length()) {
// ignore trailing blanks
String trailing = value.substring(pos.getIndex());
if(!StringUtils.isBlank(trailing)) {
throw new ParseException("Failed parsing '" + value + "' due to extra trailing character(s) '" +
trailing + "'", pos.getIndex());
}
}
return result;
}