我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"?
"12abc"
从以下文档中NumberFormat.parse:
NumberFormat.parse
从给定字符串的开头解析文本以产生数字。 该方法可能不会使用给定字符串的整个文本。
这是一个示例,可以使您了解如何确保考虑整个字符串。
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