可能重复:
如何检查String是java中的数字类型
我看到我可以通过使用解析String
成a .double
Double.parseDouble
既然那个人可能会抛出一个NumberFormatException
,而我不想通过异常进行编程,我会犹豫将parseDouble
调用放入try
/ catch
block只是为了检查字符串是否可以解析成a double
.
在Delphi中,有TryParseInt
(我认为),如果字符串无法解析为,则返回一个定义的值(我认为是-1)Integer
.
在Java中没有类似的东西?我的意思是:没有标准的方法可以做到这一点?
执行此操作的标准方法是:
double d;
try {
d = Double.parseDouble(input);
}
catch (NumberFormatException e) {
// Use whatever default you like
d = -1.0;
}
Run Code Online (Sandbox Code Playgroud)
如果您愿意,这当然可以作为库方法包装.
总的来说,我不会错过这不是语言的一部分 - 如果一个字符串形成错误,它并不代表-1
所以正确的做法是抛出异常.如果你想为治疗这种-1
你可以这样做,但有非常微弱的理由,使这个标准库的行为(为什么-1
不0
和NaN
或null
?).
你遇到的问题是你有两种可能的结果。要么你有一个有效的双精度,要么你没有。如果您有一个返回值,您需要检查,您可能会忘记检查,或者您对每个值都有一个 if 检查。
try {
double d = Double.parseDouble(input);
double d2 = Double.parseDouble(input2);
double d3 = Double.parseDouble(input3);
double d4 = Double.parseDouble(input4);
// all number are good.
} catch (NumberFormatException e) {
e.printStackTrace(); //prints error
}
Run Code Online (Sandbox Code Playgroud)
或者
double d, d2, d3, d4;
if (tryParseDouble(input)) {
d = parseDouble(input);
if (tryParseDouble(input2)) {
d2 = parseDouble(input2);
if (tryParseDouble(input3)) {
d3 = parseDouble(input3);
} else {
if (tryParseDouble(input4)) {
d4 = parseDouble(input4);
} else {
System.out.println("Cannot parse " + input4);
}
System.out.println("Cannot parse " + input3);
}
} else {
System.out.println("Cannot parse " + input2);
}
} else {
System.out.println("Cannot parse " + input);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17068 次 |
最近记录: |