gpt4 book ai didi

java - 如何有效地(不会因无效输入引发异常)解析 Java 中的整数?

转载 作者:行者123 更新时间:2023-12-01 10:30:56 25 4
gpt4 key购买 nike

此问题是 Does java have a int.tryparse that doesn't throw an exception for bad data? 的后续问题,它被标记为 Java: Good way to encapsulate Integer.parseInt() 的重复项.

这两个问题似乎更多的是关于如何捕获 NumberFormatExceptionInteger.parseInt() 抛出或者通过封装Integer.parseInt()提供一个不使用异常的更好的API .

但是两者都不是专门针对 Java 的 Integer.parseInt() 的性能方面问题而制定的。如果输入不可解析为int,则抛出异常。如果您的大部分输入包含有效的 int s,这没关系。但是,如果您的输入包含大量数据,这些数据可能是也可能不是 int s 并且您需要解析它,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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com