本文介绍了为什么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);

$ / code $ / pre
$ b $结果:

  12 
解析异常

它们都是解析异常。如何判断 DecimalFormat 不允许像12abc

解决方案

从文档:

下面是一个例子,你是一个想法,如何确保整个字符串被考虑。

  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);
返回pp.getIndex()== input.length()?结果:null;




$输出:

  12 
null
null


I'm using DecimalFormat to parse / validate user input. Unfortunately it allows characters as a suffix while parsing.

Example code:

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");
}

Result:

12
parse exception

I would actually expect a parse exception for both of them. How can I tell DecimalFormat to not allow input like "12abc"?

解决方案

From the documentation of NumberFormat.parse:

Here is an example that should give you an idea how to make sure the entire string is considered.

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;
    }
}

Output:

12
null
null

这篇关于为什么DecimalFormat允许字符作为后缀?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-15 03:56