Java 十进制格式转换非数字的数字

Java 十进制格式转换非数字的数字,java,decimalformat,parseexception,Java,Decimalformat,Parseexception,使用这种数字时,使用DecimalFormat不会产生解析异常: 123你好 这显然不是一个真正的数字,转换成123.0的值。我怎样才能避免这种行为 作为旁注,hello123确实给出了一个异常,这是正确的 谢谢, Marcel要进行精确解析,可以使用 public Number parse(String text, ParsePosition pos) 将pos初始化为0,完成后,它将在使用的最后一个字符后提供索引 然后,您可以将其与字符串长度进行比较,以确保

使用这种数字时,使用DecimalFormat不会产生解析异常:

123你好

这显然不是一个真正的数字,转换成123.0的值。我怎样才能避免这种行为

作为旁注,hello123确实给出了一个异常,这是正确的

谢谢,
Marcel要进行精确解析,可以使用

public Number parse(String text,
                ParsePosition pos)
将pos初始化为0,完成后,它将在使用的最后一个字符后提供索引

然后,您可以将其与字符串长度进行比较,以确保解析是准确的


您可以使用正则表达式验证它是否为数字:

String input = "123hello";
double d = parseDouble(input); // Runtime Error

public double parseDouble(String input, DecimalFormat format) throws NumberFormatException
{
    if (input.equals("-") || input.equals("-."))
       throw NumberFormatException.forInputString(input);
    if (!input.matches("\\-?[0-9]*(\\.[0-9]*)?"))
       throw NumberFormatException.forInputString(input);

    // From here, we are sure it is numeric.
    return format.parse(intput, new ParsePosition(0));
}

扩展@Kal的答案,这里有一个实用方法,您可以与任何格式化程序一起使用它来执行“严格”解析(使用apache commons StringUtils):

publicstaticobjectparsestrict(格式fmt,字符串值)
抛出解析异常
{
ParsePosition pos=新的ParsePosition(0);
对象结果=fmt.parseObject(值,位置);
if(pos.getIndex()
看看这个,除了Double.parseDouble(“123hello”)之外,你的代码不会带来任何东西。DecimalFormat的要点是解析国际化的数字。123 456,78在法语地区是一个有效的十进制数。@JB:事实上,我想快速:DOnly是API不允许这样做的一个小错误:decimalFormat.setStrict(true)(严格意义是不允许123 Hello作为数字)。关键是,您不能总是控制自己解析的调用。其他库可能使用format对象。非常感谢您的回复!
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;
}