嗨有没有办法将字符串解析为数字?有没有办法在不破坏程序的情况下检查字符串是否为数字?我正在考虑尝试并抓住这会是一个好主意吗?
答案 0 :(得分:4)
如果没有尝试解析字符串,就无法检查字符串是否可解析(因为任何检查都必须开始尝试将字符串解释为数字来执行该操作...)。对于中途检查,我猜你可以使用正则表达式检查字符串是否只有数字和句点。不过,你还必须使用try ... catch块。
关于如何将字符串解析为double,请尝试:
double dd;
try {
dd = Double.parseDouble(string);
}
catch (NumberFormatException e) {
System.out.println("couldnt not parse the string!");
}
答案 1 :(得分:3)
是。如果您的字符串无法解析为Double,则Double.valueOf(String s)将抛出NumberFormatException
,否则返回已解析的Double。
答案 2 :(得分:1)
我假设您要使用其中一种内置排序方法进行排序。在这种情况下,您需要创建一个自定义Comparator<T>
,实现compare()
和equals()
尝试将字符串解析为Double
,并在捕获异常时实现一些理智的默认行为。确保在方法中捕获异常 - 如果让异常进入Java API代码,则应该遇到问题。
作为让你前进的简单例子:
class DoubleStringComparator implements Comparator<String> {
public int compare(String o1, String o2) {
try {
double d1 = Double.parse(o1);
double d2 = Double.parse(d2);
if d1 > d2 {
return 1;
} else if d1 < d2 {
return -1;
else {
return 0;
}
} catch (NumberFormatException e) {
// whatever ordering you want to impose when one string is not a double
}
}
// some definition of equals() - whatever makes sense for your application
}
然后,当你想进行排序时:
Collections.sort(someListOfString, new DoubleStringComparator());
答案 3 :(得分:0)
看看parseDouble
http://download.oracle.com/javase/6/docs/api/java/lang/Double.html#parseDouble%28java.lang.String%29
并且是的,您可以捕获NumberFormatException以确定数字何时无效。
答案 4 :(得分:0)
您可以使用正则表达式来查找字符串是否为双倍
if(num1.matches(("((-|\\+)?[0-9]+(\\.[0-9]+)?)+"))){
isDoubleVal =true;
}else{
isDoubleVal = false;
}
希望它对你有所帮助。
此致 LAV