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