检查以字母“F”结尾的用户输入是否为数字

时间:2013-07-03 12:11:00

标签: java apache-commons-lang

我需要检查用户输入是字符串还是数字。

我出于此目的使用以下声明,

Double.parseDouble(string);

它适用于大多数情况,但在用户输入的输入时失败 的 123F

这应该被视为一个字符串,但上述情况将其视为一个数字。我甚至尝试过使用

 NumberUtils.isNumber(string);

但行为仍然相同。

我尝试了下面的正则表达式模式

"-?\\d+(\\.\\d+)?"

然而,还有其他替代api。

3 个答案:

答案 0 :(得分:1)

查看Double.valueOf文档中列出的相当复杂的正则表达式。如果您需要对应用程序进行更严格的限制,则需要编写自己的正则表达式。正如其他人所指出的那样,使用Double.parseDouble可以实现许多功能,包括Infinity

答案 1 :(得分:0)

来自doc

  

有效数字包括标有0x限定符的十六进制数,   科学记数法和用类型限定符标记的数字(例如   123L)。

所以123F似乎被检测为十六进制数。

您可以使用NumberUtils.isDigits(String s)方法

它检查字符串是否只包含数字字符。

所以你的工作代码看起来像

boolean b = NumberUtils.isDigits(string);
if(!b)
  // then all are digits

答案 2 :(得分:0)

如果我要支持带有F后缀的浮点数,我会这样做:

if (str.endsWith("F") || str.endsWith("f")) {
   num = Double.parseDouble(str.substring(0, str.length() - 1));
} else {
   num = Double.parseDouble(str);
} 

但是,我建议您不要这样做。

“f”后缀不是标准的数学/科学形式。它在某些编程语言中只具有明确定义的含义...作为程序的源代码中的数字文字。在该上下文中,它表示具有IEE单精度表示的浮点数。 (而你正试图将其视为double!)

避免这种潜在混淆的最佳方法(对于那些没有理解数字和数字文字之间差异的小型程序员),只需将其视为错误的输入。


  

然而,还有其他替代api。

AFAIK,没有。主要是因为格式没有意义。