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