我使用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