此问题是Does java have a int.tryparse that doesn't throw an exception for bad data?的后续问题,该问题被标记为Java: Good way to encapsulate Integer.parseInt()的重复项。
这两个问题似乎都与如何捕获由NumberFormatException
引发的Integer.parseInt()
或提供更好的API(通过封装Integer.parseInt()
不使用异常)有关。
但是,没有一种方法专门用于解决性能方面的问题,即如果输入不能解析为Integer.parseInt()
,则Java的int
会引发异常。如果您的大部分输入都包含有效的int
,则无关紧要。但是,如果您的输入包含可能不是int
的大量数据,并且您需要对其进行解析,则Integer.parseInt()
效率低下。
因此,这个特定的问题是关于如何有效地解析整数,因为输入可以包含很多有效的整数,但也可以包含很多无效的整数。
最佳答案
Here is a good article about efficiently parsing integers.原始站点已关闭,因此我在返回计算机的过程中包括了该链接。
返回Integer而不是int会使代码变慢。您可以采用本文中的代码,并根据情况返回Integer.MIN_VALUE或零,或其他一些值:
public static int parseInt( final String s )
{
if ( string == null )
return Integer.MIN_VALUE;
// Check for a sign.
int num = 0;
int sign = -1;
final int len = s.length( );
final char ch = s.charAt( 0 );
if ( ch == '-' )
{
if ( len == 1 )
return Integer.MIN_VALUE;
sign = 1;
}
else
{
final int d = ch - '0';
if ( d < 0 || d > 9 )
return Integer.MIN_VALUE;
num = -d;
}
// Build the number.
final int max = (sign == -1) ?
-Integer.MAX_VALUE : Integer.MIN_VALUE;
final int multmax = max / 10;
int i = 1;
while ( i < len )
{
int d = s.charAt(i++) - '0';
if ( d < 0 || d > 9 )
return Integer.MIN_VALUE;
if ( num < multmax )
return Integer.MIN_VALUE;
num *= 10;
if ( num < (max+d) )
return Integer.MIN_VALUE;
num -= d;
}
return sign * num;
}
关于java - 如何有效地(在不为无效输入引发异常的情况下)解析Java中的整数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35098868/