最优雅的是java的数字()解决方案

时间:2010-08-17 21:35:13

标签: java parsing isnumeric

我现在正在向Java移植一小段PHP代码,我依靠函数is_numeric($x)来确定$x是否为数字。在java中似乎没有相同的功能,我对目前为止找到的解决方案不满意。

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

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

7 个答案:

答案 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扩展数字