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.

这是一个示例,可以让您了解如何确保考虑整个字符串。

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

https://stackoverflow.com/questions/4324997/

相关文章:

java - 在 java 的 simpledateformat 中强制 4 位数年份

python - 在 Python 中截断十进制值

objective-c - 格式化数字以显示逗号和/或美元符号

formatting - CNContactFormatter 需要哪些键?

excel - VBA:将文本转换为数字

.net - 用逗号格式化数字,但保留小数

c# - string.Format 与 string.Join

java - 如何在android中格式化longs以始终显示两位数

c++ - 将 double 指数的可移植打印到 C++ iostreams

excel - 如何在 Excel 单元格内填零