gpt4 book ai didi

java - 如何使用特定基数将任何有效字符串解析为整数?

转载 作者:行者123 更新时间:2023-12-01 14:40:00 24 4
gpt4 key购买 nike

背景

使用Integer.parseInt(someIntString, radix)并不总是有效,在某些情况下可能会返回 NumberFormatException。

我检查了API,它说会返回这样的异常:

if string cannot be parsed as an integer value, or radix < Character.MIN_RADIX || radix > Character.MAX_RADIX.

导致异常的示例代码:

System.out.println(Integer.parseInt("ff00ff00",16));

在 java 上我遇到了同样的异常。

由于整数可容纳 4 个字节,因此这应该仍然有效,但事实并非如此。

这里有一个证明这种事情是可能的:

final String input="ff00ff00";
int output=0;
for(int i=0;i<input.length();++i)
{
output<<=4;
final char c=input.charAt(i);
if(c>='a')
output+=c-'a'+10;
else output+=c-'0';
}
System.out.println(output);
System.out.println(Integer.toHexString(output));

请注意,我知道使用 Color.parseColor()函数(它可能与我编写的代码非常相似),但我想处理任何基数而不仅仅是十六进制。

我还知道使用 parseInt 支持负值解析,所以这就是它可能导致异常的原因。

问题

是否有内置函数或已知算法可以使用任何基数将字符串解析为整数?

我当然假设整型变量可以保存该值(最多使用 4 个字节)并且数字的符号无关紧要。

最佳答案

好吧,我认为这个问题没有内置的解决方案,但是使用我在问题中编写的相同代码很容易解决它:

public static int parseInt(final String input,final int radix)
{
int output=0;
for(int i=0;i<input.length();++i)
{
output*=radix;
final char c=input.charAt(i);
if(c>='a')
output+=c-'a'+10;
else output+=c-'0';
}
return output;
}

关于java - 如何使用特定基数将任何有效字符串解析为整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16064596/

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