我现在正在将一小段 PHP 代码移植到 java,我依靠该函数is_numeric($x)
来确定是否$x
是数字。java中似乎没有等效的函数,我对目前找到的解决方案并不满意。
我倾向于在这里找到的正则表达式解决方案:http ://rosettacode.org/wiki/Determine_if_a_string_is_numeric
我应该使用哪种方法,为什么?
我现在正在将一小段 PHP 代码移植到 java,我依靠该函数is_numeric($x)
来确定是否$x
是数字。java中似乎没有等效的函数,我对目前找到的解决方案并不满意。
我倾向于在这里找到的正则表达式解决方案:http ://rosettacode.org/wiki/Determine_if_a_string_is_numeric
我应该使用哪种方法,为什么?
请注意,PHP isNumeric() 函数将正确确定十六进制和科学记数法是数字,而您链接到的正则表达式方法不会。
一种选择是使用Commons-Lang 中的NumberUtils.isNumber(),特别是如果您已经在使用 Apache Commons 库。它将处理 PHP 函数将处理的相同情况。
您是否考虑过使用StringUtils 库?有一个 isNumeric() 函数可能是您正在寻找的。(请注意,“”将被评估为真)
在字符串中包含数字通常是个坏主意。如果要使用此数字,请对其进行解析并将其用作数字。您不需要“检查”它是否是数字,无论您是否想将其用作数字。
如果您需要转换它,那么您可以使用从Integer.parseInt(String)
到的每个解析器BigDecimal(String)
如果您只需要检查内容是否可以视为数字,那么您可以使用正则表达式。
如果您的字符串可以包含浮点数,请不要使用 parseInt。
您也可以选择使用正则表达式。
if (theString.matches("((-|\\+)?[0-9]+(\\.[0-9]+)?)+")))
return true;
return false;
您是否尝试过 Integer.parseInt()?(我不确定方法名称,但 Integer 类有一个从字符串创建 Integer 对象的方法)。或者,如果您需要处理非整数,Double 对象也可以使用类似的方法。如果这些失败,则会引发异常。
如果您需要解析非常大的数字(大于 int/double),并且不需要确切的值,那么一个简单的基于正则表达式的方法可能就足够了。
在强类型语言中,泛型 isNumeric(String num) 方法不是很有用。13214384348934918434441 是数字,但不适合大多数类型。许多适合的人不会返回相同的值。
正如 Colin 所指出的,不建议在应用程序中携带字符串中的数字。isNumberic 函数应该只适用于接口方法的输入数据。这些应该比 isNumeric 有更精确的定义。其他人提供了各种解决方案。正则表达式可用于一次测试多个条件,包括字符串长度。
只需使用 if((x instanceof Number)
//如果也检查可解析的数字
|| (x instanceof String && x.matches("((-|\+)?[0-9]+(\.[0-9]+)?)+"))
){ ... }
//---包括 BigDecimal 在内的所有数字类型 extend Number