java.lang.String
转换为java.lang.Integer
,如果0
是不可转换的,则分配默认值String
。这是我想出的。我希望能评估这种方法。老实说,这对我来说有点奇怪:
#1 楼
这是一个解决方案:int tryParseInt(String value) {
try {
return Integer.parseInt(value);
} catch(NumberFormatException nfe) {
// Log exception.
return 0;
}
}
您应该捕获NumberFormatException而不是异常。
#2 楼
我会考虑使用Apache Commons Lang的NumberUtils.toInt
来做到这一点:public static int NumberUtils.toInt(java.lang.String str, int defaultValue)
该实现使用已经提到的
Integer.parseInt
以及附加的null
检查。 br />另请参见:有效Java,第2版,第47条:知道和使用库(作者仅提及JDK的内置库,但我认为其他库也可能适用。)评论
\ $ \ begingroup \ $
极好的建议!我非常感谢Apache Commons库。
\ $ \ endgroup \ $
– janoulle
17年9月19日在16:56
#3 楼
正如其他人指出的那样,您的代码永远不应捕获Exception。这样做会引起各种问题。除了给出的答案之外,我还建议您不要将值默认设置为0,而应使其更通用。例如public static int parseInteger( String string, int defaultValue ) {
try {
return Integer.parseInt(string);
}
catch (NumberFormatException e ) {
return defaultValue;
}
}
#4 楼
您不应使用new Integer( string )
,而应使用Integer.valueOf( string )
。如之前在许多其他线程中所讨论的,由于valueOf
可以查找较小的整数值并减少了创建新对象的开销,因此它可能会更快。#5 楼
只是有点学究:public static final int iDEFAULT_DEFAULT_PARSED_INT = 0;
public static int ifIntFromString( String sToParse) {
return ifIntFromString( sToParse, iDEFAULT_DEFAULT_PARSED_INT );
}
public static int ifIntFromString( String sToParse, int iDefaultValue ) {
int iReturnValue = null;
try {
iReturnValue = Integer.parseInt(sToParse);
} catch ( NumberFormatException e ) {
iReturnValue = iDefaultValue;
}
assert (null != iReturnValue) : "Impossible - no return value has been set!";
return iReturnValue;
}
如果有一种方法可以做到这一点而不必捕获异常(由于性能),那真是太好了问题),而不必自己编写解析代码-但这就是基础库为我们提供的功能。
评论
\ $ \ begingroup \ $
匈牙利记号实际上是没有必要的...
\ $ \ endgroup \ $
–叙利亚
2012年12月24日19:37
\ $ \ begingroup \ $
@assylias:嗯,仅是为了保持较高水平的学究主义... :-)
\ $ \ endgroup \ $
–理查德·阿诺德·米德(Richard Arnold Mead)
13年1月3日,0:41
\ $ \ begingroup \ $
它不会编译(无法从null转换为int)。
\ $ \ endgroup \ $
–palacsint
13年1月8日在22:16
\ $ \ begingroup \ $
@palacsint阿克!谢谢-麻烦了。语言太多-我很抱歉。在Java中,null是仅具有自身标识的一阶令牌(如果我没记错的话),而在许多其他语言(例如C / C ++)中,n等于整数零。在这种情况下,我的意图是将null用作“非值”,以指示在设置变量但仍对其进行初始化时失败。我应该使用Integer对象而不是int类型,然后将Integer转换为int作为返回值。
\ $ \ endgroup \ $
–理查德·阿诺德·米德(Richard Arnold Mead)
2013年1月8日22:32
#6 楼
Java中的解析方法将字符串转换为Int在Java中,有两种方法将字符串转换为Int,它们是:
Integer.parseInt()
Integer.valueOf()
使用
Integer.parseInt()
将字符串转换为Int Integer.parseInt()
是Java中用于将字符串转换为原始整数的Integer类的静态方法。将一种数据类型转换为另一种数据的过程。例如,将String转换为整数。编码部分请参考:将字符串转换为int的最佳方法#7 楼
在Java中创建和抛出Exception
的性能成本通常可以比通常验证值的转换高得多,并且通常比这种方法花费更多。对于所有我知道的JVM(IBM的Java,Oracle的Java,OpenJDK等),异常的开销通常在抛出异常时相对于调用堆栈深度呈线性比例,因此深度嵌套的异常代价更高最重要的是,在好的代码中,绝对不要(只有很少的例外)将例外作为正常/预期代码流的一部分。因此,在您的情况下,我将通过尽最大的努力消除异常情况,同时仍然适当地处理异常,来最大程度地减少异常的可能性。 for Double.valueOf(String)暗示了这一点,并且还提供了一个正则表达式,可用于检查valueOf是否可能引发异常。
有效数字,在大多数情况下,可以大大提高处理无效数字的性能,根据我的经验,这种权衡是不值得的。
评论
\ $ \ begingroup \ $
+1,用于捕获正确的异常并使用parseInt(),以便可以返回缓存的Integer而不是保证返回新实例。
\ $ \ endgroup \ $
–unholysampler
2012-12-19 14:09