本文介绍了为什么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允许字符作为后缀?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!