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);