我有一个小方法,除了其他事情之外,还可以将字符串转换为整数。由于字符串是方法的参数,我想确保该字符串是可转换的。所以我只是想知道什么是最安全和/或最快的方法。
版本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应该是我的小程序中的“错误值”,换句话说,所有三个版本的方法都可以在我的程序中完美地工作。
我非常开放的任何其他建议,你可以给给予我,所以随时创建自己的版本,如果你认为你的更好。
非常感谢您的支持提前。
7条答案
按热度按时间rggaifut1#
Guava为此提供了一个实用方法,如果无法解析String,该方法将返回null。
https://google.github.io/guava/releases/19.0/API/docs/com/google/common/primitives/Ints.html#tryParse(java.lang.String)
字符串
nbysray52#
首先,请注意
C
版本不是防弹的:它会拒绝负数,不会捕获太大的数字。版本
B
是可以的,但它使调用者改变编码风格:调用者需要一直检查-1
,而不是捕获错误并将其与其他错误一起处理。在读取多个整数的情况下,这可能不是最佳的,但错误处理并不取决于哪个特定的整数失败。此外,使用您的API的新程序员可能会忘记检查-1
,并无意中使用错误代码。这就是为什么我会坚持第一种选择:任何了解Java API的人都会立即熟悉使用
A
版本的代码,而不需要了解函数内部发生了什么。d6kp6zgx3#
我相信修改后的B抛出异常而不是返回-1将是最好的选择。抛出异常的级别最好,在那里它可以被处理以向用户发送正确的响应。返回一个像-1这样的值会使你的代码容易出错。假设另一个程序员正在使用你的方法,他/她只是有你的方法的签名。所以从签名中不清楚他/但是如果你抛出异常并将其添加到你的方法声明中,那么它将使其他程序员能够正确地使用你的方法,需要异常处理。对我来说,这看起来是最好的:
字符串
bzzcjhmw4#
没有任何API的Java 8:
字符串
kgsdhlau5#
字符串
使用replaceAll来替换白色空格,加号是CPU友好的,即使似乎不需要。
13z8s7eq6#
我使用了2个答案的组合,使其对null,空或空白字符串和非数字字符安全:
字符串
jk9hmnmh7#
我希望这对某人有所帮助:
**请注意:**StringUtils来自'org.apache.commons.lang3.StringUtils'
字符串