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



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

我使用以下声明,

Double.parseDouble(string);

它在大多数场景中都有效,但当用户输入的输入如下时会失败123F

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

 NumberUtils.isNumber(string);

但行为仍然是一样的。

我尝试了下面的正则表达式模式,它工作

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

然而,是否有其他相同的替代api。

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

从文档

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

因此,123F似乎被检测为一个十六进制数。

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

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

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

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

如果我要支持带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,没有。主要是因为格式没有真正意义。

最新更新