【发布时间】:2011-11-09 00:46:13
【问题描述】:
您好,有什么方法可以将字符串解析为数字吗?有没有办法在不破坏程序的情况下检查字符串是否为数字?我正在考虑使用 try and catch 这是一个好主意吗?
【问题讨论】:
-
如何在不使程序崩溃的情况下做到这一点?
-
@Ingo,您以最干净的方式回答了问题。
您好,有什么方法可以将字符串解析为数字吗?有没有办法在不破坏程序的情况下检查字符串是否为数字?我正在考虑使用 try and catch 这是一个好主意吗?
【问题讨论】:
如果不尝试解析字符串,就无法检查字符串是否可解析(因为任何检查都必须开始尝试将字符串解释为数字才能做到这一点......)。对于中途检查,我想您可以使用正则表达式来检查字符串是否只有数字和句点。不过,您还必须使用 try...catch 块。
关于如何将字符串解析成双精度,试试这个:
double dd;
try {
dd = Double.parseDouble(string);
}
catch (NumberFormatException e) {
System.out.println("couldnt not parse the string!");
}
【讨论】:
是的。如果您的字符串无法解析为 Double,Double.valueOf(String s) 将抛出 NumberFormatException,否则返回解析后的 Double。
【讨论】:
我假设您想使用其中一种分类的内置排序方法进行排序。在这种情况下,您需要创建一个自定义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());
【讨论】:
看看 parseDouble
http://download.oracle.com/javase/6/docs/api/java/lang/Double.html#parseDouble%28java.lang.String%29
是的,您可以捕获 NumberFormatException 以确定数字何时无效。
【讨论】:
您可以使用正则表达式来查找字符串是否为双倍
if(num1.matches(("((-|\\+)?[0-9]+(\\.[0-9]+)?)+"))){
isDoubleVal =true;
}else{
isDoubleVal = false;
}
希望对你有所帮助。
问候, 薰衣草
【讨论】:
"1.9E42"这样的双字符串