要求用户输入一个数字,然后解析并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;

10-06 15:35