16

我现在正在将一小段 PHP 代码移植到 java,我依靠该函数is_numeric($x)来确定是否$x是数字。java中似乎没有等效的函数,我对目前找到的解决方案并不满意。

我倾向于在这里找到的正则表达式解决方案:http ://rosettacode.org/wiki/Determine_if_a_string_is_numeric

我应该使用哪种方法,为什么?

4

7 回答 7

16

请注意,PHP isNumeric() 函数将正确确定十六进制和科学记数法是数字,而您链接到的正则表达式方法不会。

一种选择是使用Commons-Lang 中的NumberUtils.isNumber(),特别是如果您已经在使用 Apache Commons 库。它将处理 PHP 函数将处理的相同情况。

于 2010-08-17T21:45:42.360 回答
4

您是否考虑过使用StringUtils 库?有一个 isNumeric() 函数可能是您正在寻找的。(请注意,“”将被评估为真)

于 2010-08-17T21:44:30.537 回答
2

在字符串中包含数字通常是个坏主意。如果要使用此数字,请对其进行解析并将其用作数字。您不需要“检查”它是否是数字,无论您是否想将其用作数字。

如果您需要转换它,那么您可以使用从Integer.parseInt(String)到的每个解析器BigDecimal(String)

如果您只需要检查内容是否可以视为数字,那么您可以使用正则表达式。

如果您的字符串可以包含浮点数,请不要使用 parseInt。

于 2010-08-17T21:41:11.143 回答
2

您也可以选择使用正则表达式。

   if (theString.matches("((-|\\+)?[0-9]+(\\.[0-9]+)?)+")))
     return true;

    return false;
于 2010-08-17T21:57:49.683 回答
1

您是否尝试过 Integer.parseInt()?(我不确定方法名称,但 Integer 类有一个从字符串创建 Integer 对象的方法)。或者,如果您需要处理非整数,Double 对象也可以使用类似的方法。如果这些失败,则会引发异常。

如果您需要解析非常大的数字(大于 int/double),并且不需要确切的值,那么一个简单的基于正则表达式的方法可能就足够了。

于 2010-08-17T21:39:51.350 回答
0

在强类型语言中,泛型 isNumeric(String num) 方法不是很有用。13214384348934918434441 是数字,但不适合大多数类型。许多适合的人不会返回相同的值。

正如 Colin 所指出的,不建议在应用程序中携带字符串中的数字。isNumberic 函数应该只适用于接口方法的输入数据。这些应该比 isNumeric 有更精确的定义。其他人提供了各种解决方案。正则表达式可用于一次测试多个条件,包括字符串长度。

于 2010-08-17T22:17:22.907 回答
0

只需使用 if((x instanceof Number)

//如果也检查可解析的数字

|| (x instanceof String && x.matches("((-|\+)?[0-9]+(\.[0-9]+)?)+"))

){ ... }
//---包括 BigDecimal 在内的所有数字类型 extend Number

于 2013-11-23T06:30:08.087 回答