要求用户输入一个数字,然后解析并doSomething()
。
如果用户输入数字和字符串的混合物,则doSomethingElse()
因此,我将代码编写如下:
String userInput = getWhatUserEntered();
try {
DecimalFormat decimalFormat = (DecimalFormat)
NumberFormat.getNumberInstance(<LocaleHere>);
Number number = decimalFormat.parse(userInput);
doSomething(number); // If I reach here, I will doSomething
return;
}
catch(Exception e) {
// Oh.. user has entered mixture of alpha and number
}
doSomethingElse(userInput); // If I reach here, I will doSomethingElse
return;
函数
getWhatUserEntered()
如下所示String getWhatUserEntered()
{
return "1923";
//return "Oh God 1923";
//return "1923 Oh God";
}
但有个问题。
用户输入1923年->击中
doSomething()
当用户输入Oh God 1923->
doSomethingElse()
时当用户输入1923时,哦上帝->
doSomething()
被击中。这是错的在这里,我需要点击
doSomethingElse()
。我要实现的功能是否有任何内置(更好)的功能?
我的代码可以修改以满足需要吗?
最佳答案
由于特定的DecimalFormat实现,一切正常。 JavaDoc说:
从给定字符串的开头解析文本以产生一个
数。该方法可能不会使用给定字符串的整个文本。
因此,您必须将代码修复为以下形式:
String userInput = getWhatUserEntered();
try {
NumberFormat formatter = NumberFormat.getInstance();
ParsePosition position = new ParsePosition(0);
Number number = formatter.parse(userInput, position);
if (position.getIndex() != userInput.length())
throw new ParseException("failed to parse entire string: " + userInput, position.getIndex());
doSomething(number); // If I reach here, I will doSomething
return;
}
catch(Exception e) {
// Oh.. user has entered mixture of alpha and number
}
doSomethingElse(userInput); // If I reach here, I will doSomethingElse
return;