转载

java – 为什么DecimalFormat允许字符作为后缀?

我使用DecimalFormat来解析/验证用户输入.不幸的是,它在解析时允许字符作为后缀.

示例代码:

try {
  final NumberFormat numberFormat = new DecimalFormat();
  System.out.println(numberFormat.parse("12abc"));
  System.out.println(numberFormat.parse("abc12"));
} catch (final ParseException e) {
  System.out.println("parse exception");
}

结果:

12
parse exception

我实际上会期待两者的解析异常.如何告诉DecimalFormat不允许输入像“12abc”?

NumberFormat.parse

的文档:

Parses text from the beginning of the given string to produce a number. The method may not use the entire text of the given string.

这是 an example ,应该给你一个想法如何确保整个字符串被考虑.

import java.text.*;

public class Test {
    public static void main(String[] args) {
        System.out.println(parseCompleteString("12"));
        System.out.println(parseCompleteString("12abc"));
        System.out.println(parseCompleteString("abc12"));
    }

    public static Number parseCompleteString(String input) {
        ParsePosition pp = new ParsePosition(0);
        NumberFormat numberFormat = new DecimalFormat();
        Number result = numberFormat.parse(input, pp);
        return pp.getIndex() == input.length() ? result : null;
    }
}

输出:

12
null
null

http://stackoverflow.com/questions/4324997/why-does-decimalformat-allow-characters-as-suffix

原文  https://codeday.me/bug/20181015/291714.html
正文到此结束
Loading...