如何检查字符串是否为数字

How to check if a String is a number or not

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

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 部分有关,但我不确定也无法证明。

有没有经验丰富的人知道为什么会发生这种情况以及如何解决?

谢谢。

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())
}

Double.parseDouble() 不是推荐的方法。由谁推荐,为了什么?它使用 double 文字 in Java source code 的规则,其中 99% 不是您希望程序的馈送方式(它允许指数、十六进制等等)。哦,它不区分语言环境。

如果输入来自人工,您最好使用 DecimalFormat,它可以识别区域设置并且可以轻松自定义(它甚至可以控制舍入模式):

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

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

不要被次要的事情分心。用于此类任务的实用程序。例如 Apache Commons Lang:

NumberUtils.isNumber(s);

什么可以是esear?