如果用户输入数字,则需要解析它并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";
}
但是,有一个问题。
doSomething()
被点击doSomethingElse()
被点击doSomething()
被击中。这是错误
在这里,我需要点击doSomethingElse()
。我想要实现的东西是否有任何内置(更好)的功能? 我的代码可以修改以满足需求吗?
答案 0 :(得分:3)
由于特定的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;
答案 1 :(得分:3)
你最好使用一些正则表达式,例如userInput.matches("[0-9]+")
仅用于匹配数字
答案 2 :(得分:2)
DecimalFormat
接受任何字符串,如果它以数字开头。
您可以做的是执行额外检查。
try {
DecimalFormat decimalFormat = (DecimalFormat)
NumberFormat.getNumberInstance(<LocaleHere>);
Number number = decimalFormat.parse(userInput);
if (number.toString().equals(userInput)) {
doSomething(number); // If I reach here, I will doSomething
return;
}
}