java安全地将字符串转换为整数
我有一个小方法,它可以将字符串转换成整数。由于字符串是该方法的参数,因此我希望确保该字符串是可转换的。所以我只是想知道什么是最安全和/或最快的方法
版本A:保持现状,承担风险(我正试图避免)
public static int stringToInt(String param) {
return Integer.valueOf(param);
}
(就速度而言,它会对版本B和C产生什么样的影响?)
版本B:捕获异常
public static int stringToInt(String param) {
try {
return Integer.valueOf(param);
} catch(NumberFormatException e) {
return -1;
}
}
版本C:检查字符串的每个字母,看它是否是数字
public static int stringToInt(String param) {
for(char c : param.toCharArray()) {
if(!Character.isDigit(c))
return -1;
}
return Integer.valueOf(param);
}
请注意,参数必须是正数,-1应该是我的小程序中的“错误值”,换句话说,所有三个版本的方法在我的程序中都可以完美地工作
我非常乐意接受你能给我的任何其他建议,所以如果你认为你的更好,请随意创建你自己的版本
非常感谢您的支持
# 1 楼答案
使用replaceAll来替换空白。尽管看起来不需要,但它对cpu友好
# 2 楼答案
首先,请注意
C
版本不是防弹的:它将拒绝负数,并且不会捕获太大的数字版本
B
是可以的,但它会让调用者改变编码风格:调用者不需要捕捉错误并将其与其他错误一起处理,而是需要一直检查-1
。在读取多个整数的情况下,这可能是次优的,但错误处理并不取决于哪个整数失败。此外,使用API的新程序员可能会忘记检查-1
,并在无意中使用错误代码这就是为什么我会选择第一个选项:使用版本
A
的代码对任何了解Java API的人来说都会立即变得熟悉,而无需了解函数内部发生了什么# 3 楼答案
没有任何API的Java 8:
# 4 楼答案
我使用了两个答案的组合来确保空字符串、空字符串或空字符串以及非数字字符的安全性:
# 5 楼答案
Guava为此提供了一个实用方法,如果无法解析字符串,它将返回null
https://google.github.io/guava/releases/19.0/api/docs/com/google/common/primitives/Ints.html#tryParse(java.lang.String)
# 6 楼答案
我相信修改后的B抛出异常而不是返回-1将是最好的选择。将异常抛出到可以处理的级别,以便向用户发送正确的响应,这样做很好。返回-1这样的值会使代码容易出错。假设另一个程序员正在使用你的方法,而他/她只是拥有你的方法的签名。因此,从签名中不清楚他/她应该编写什么代码来处理异常或错误场景。但是,如果抛出异常并将其添加到方法声明中,那么它将使其他程序员能够正确使用您的方法以及所需的异常处理。对我来说这看起来是最好的: