小编典典

为什么DecimalFormat允许使用字符作为后缀?

java

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"


阅读 213

收藏
2020-11-01

共1个答案

小编典典

从以下文档中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
2020-11-01