如何检查String是否为数字

时间:2016-02-25 07:37:48

标签: java string double

这里没有太多要解释的,我需要检查String是否是一个数字,我尝试了这个推荐的方法,但有时会失败:

try {

    Double.parseDouble((String) myString);
    // CODE IF IT IS A NUMBER HERE

} catch (NumberFormatException e) {
    // CODE IF IT IS NOT A NUMBER HERE
    e.printStackTrace();
}

使其失败的字符串为C:\Users\xx11\Desktop\Example\Example.doc

我认为这与11\D部分有关,但我不确定,我无法证明这一点。

有经验丰富的人是否知道为什么会这样,以及如何解决?

谢谢。

3 个答案:

答案 0 :(得分:2)

Double.parseDouble()不是推荐的方法。推荐由谁和为什么?它使用double文字in Java source code的规则,其中99%不是您希望程序被提供的方式(它允许指数,十六进制和诸如此类)。哦,这不是对语言敏感的。

如果输入来自人类,您最好使用具有区域设置感知的DecimalFormat,并且可以轻松自定义(甚至可以控制舍入模式):

DecimalFormat fmt = new DecimalFormat();
Number number = fmt.parse(input);

从DecimalFormat中,您可以获得Integer,Number或BigDecimal,具体取决于数量描述的内容以及您计划如何使用它。

答案 1 :(得分:2)

不要被次要事情分心。使用utilites执行此类任务。例如 Apache Commons Lang

NumberUtils.isNumber(s);

什么可以是esear?

答案 2 :(得分:0)

Double.parseDouble()不会尝试在输入中为您找到一个数字。它希望整个输入是一个数字。同样适用于Integer.parseInt()等。

您需要首先提取可能是的数字,然后尝试解析它。例如:

private static final Pattern NUMERIC = Pattern.compile("\\d+(\\.\\d+)?");

// In code:

final Matcher m = NUMERIC.matcher(input);

while (m.find()) {
    // try and parse m.group())
}