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

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

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

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

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

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

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

在String中使用数字通常是个坏主意。 如果要使用此数字,请解析它并将其用作数字。 您不应该“检查”它是否是数字,或者您想要将其用作数字。

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

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

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

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

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

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

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

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

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

只需使用if((x instanceof Number)

//如果还要检查可分析的数字

|| (x instanceof String && x.matches(“(( – | \ +)?[0-9] +(\。[0-9] +)?)+”))

){…}
// —包括BigDecimal在内的所有数字类型都扩展了Number

Interesting Posts