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

Java 如何检查字符串是否为数字,java,string,double,Java,String,Double,这里没有什么要解释的,我需要检查字符串是否是数字,我尝试了推荐的方法,但有时失败: 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\x

这里没有什么要解释的,我需要检查字符串是否是数字,我尝试了推荐的方法,但有时失败:

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()
不会尝试在输入中为您查找数字。它希望输入作为一个整体是一个数字。这同样适用于
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
literals的规则,这99%不是您希望程序的输入方式(它允许指数、十六进制等等)。哦,而且它不区分区域设置

如果输入来自人,则最好使用具有区域设置意识且易于自定义的输入(它甚至提供对舍入模式的控制):

从DecimalFormat可以得到整数、数字或BigDecimal,这取决于该数量描述的内容以及您计划如何使用它。

Double.parseDouble()
不是推荐的方法。由谁推荐,推荐目的是什么?它使用
double
literals的规则,这99%不是您希望程序的输入方式(它允许指数、十六进制等等)。哦,而且它不区分区域设置

如果输入来自人,则最好使用具有区域设置意识且易于自定义的输入(它甚至提供对舍入模式的控制):


从十进制格式中,你可以得到一个整数、一个数字或一个大十进制,这取决于该数量描述的内容以及你打算如何使用它。

不要被次要的事情分散注意力。将实用程序用于此类任务。例如,Apache Commons Lang:


什么是esear?

不要被次要的事情分散注意力。将实用程序用于此类任务。例如,Apache Commons Lang:



什么是esear?

什么是
C:\Users\xx11\Desktop\Excel\Excel.opc
?什么是
11\D
?当您
.parseDouble()
时,整个字符串应该是一个数字!什么是
i
j
data
getData
get
?…是的,如果正在解析的字符串不是双精度类型,则Double.parseDouble将失败。您已经为其处理了NumberFormatException。那么这里的问题是什么呢?您可以使用
org.apache.commons.lang.math.NumberUtils
library。调用
isNumber(number)
method什么是
C:\Users\xx11\Desktop\Excel\Excel.opc
?什么是
11\D
?当您
.parseDouble()
时,整个字符串应该是一个数字!什么是
i
j
data
getData
get
?…是的,如果正在解析的字符串不是双精度类型,则Double.parseDouble将失败。您已经为其处理了NumberFormatException。那么这里的问题是什么呢?您可以使用
org.apache.commons.lang.math.NumberUtils
library。调用
isNumber(number)
method他不应该使用
matches
而不是
find()
?@最重要的是不应该。OP似乎想在字符串中找到一个数字。如果您
.matches()
,则整个输入都应匹配。>OP似乎希望在字符串中找到一个数字。不,我想知道字符串是否是数字。如果字符串为“asd11asdn”,则它包含一个数字,但不是一个数字。:)@但是您的示例字符串“C:\Users\xx11\Desktop\Excel\Excel.opc”正是这样的:一个只包含一个数字而不是一个的字符串。你解释说它无法解析。@SeelenVirtuse对不起,我的英语不够好。我的意思是它会使我的检查失败(它不会抛出异常,我希望它会这样做)。他不应该使用
匹配项
而不是
查找()
?@最重要的是,不。OP似乎想在字符串中找到一个数字。如果您
.matches()
,则整个输入都应匹配。>OP似乎希望在字符串中找到一个数字。不,我想知道字符串是否是数字。如果字符串为“asd11asdn”,则它包含一个数字,但不是一个数字。:)@但是您的示例字符串“C:\Users\xx11\Desktop\Excel\Excel.opc”正是这样的:一个只包含一个数字而不是一个的字符串。你解释说它无法解析。@SeelenVirtuse对不起,我的英语不够好。我的意思是它使我的检查失败(它不会抛出异常,我希望它会这样做)。谢谢你的想法。尝试此操作后,
SimpleDecimalFormat
不作为Java“默认”类存在。可能是
import Java.text.DecimalFormat
?现在您编辑了代码,是的。以前,使用
SimpleCIMalFormat
,不起作用。:)谢谢你的主意。尝试此操作后,
SimpleDecimalFormat
不作为Java“默认”类存在。可能是
import Java.text.DecimalFormat
?现在您编辑了代码,是的。以前,使用
SimpleCIMalFormat
,不起作用。:)我不想使用外部API,许可证总是有问题。但是谢谢你的建议:)@Mayuso有很多免费的库,包括org.apache.commons.lang.math.NumberUtils和org.apache.commons.lang.math.StringUtils。另一个选项
StringUtils.isNumeric(arg0)
Apache通信
NumberUtils.isNumber(s);