fel*_*itz 16 java type-conversion
我有一个小方法,除其他外,还将字符串转换为整数.由于字符串是方法的参数,我想确保该字符串是可转换的.所以我只是想知道什么是最安全和/或最快的方式.
版本A:保持原样并承担风险(我试图避免)
public static int stringToInt(String param) {
return Integer.valueOf(param);
}
Run Code Online (Sandbox Code Playgroud)
(就速度而言,它会对版本B和C产生什么样的差异?)
版本B:抓住异常
public static int stringToInt(String param) {
try {
return Integer.valueOf(param);
} catch(NumberFormatException e) {
return -1;
}
}
Run Code Online (Sandbox Code Playgroud)
版本C:检查字符串的每个字母,看它是不是数字
public static int stringToInt(String param) {
for(char c : param.toCharArray()) {
if(!Character.isDigit(c))
return -1;
}
return Integer.valueOf(param);
}
Run Code Online (Sandbox Code Playgroud)
请注意,参数必须是一个正数,-1应该是我的小程序中的"错误值",换句话说,所有三个版本的方法在我的程序中都可以正常工作.
我对你可以给我的任何其他建议持开放态度,所以如果你认为自己的版本更好,请随意创建自己的版本.
非常感谢您的支持.
Guava为此提供了一个实用程序方法,如果无法解析String,则返回null.
Integer result = Ints.tryParse("1"); //returns 1
Integer result = Ints.tryParse("-1"); //returns -1
Integer result = Ints.tryParse("a"); //returns null
Run Code Online (Sandbox Code Playgroud)
首先,请注意版本C不是防弹的:它会拒绝负数,并且不会捕获太大的数字.
版本没问题B,但它使调用者改变了编码风格:调用者需要一直检查,而不是捕获错误并将其与其他错误一起处理-1.在读取多个整数的情况下,这可能不是最理想的,但错误处理不依赖于哪个特定的失败.此外,使用您的API的新编码人员可能会忘记检查-1,并无意中使用错误代码.
这就是为什么我会A坚持使用第一个选项:使用版本的代码对任何了解Java API的人来说都很熟悉,而无需了解函数内部发生的事情.