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

标签 java android parsing integer radix

背景

使用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/

相关文章:

android - 时代广场日历XML文件错误

Objective-C header 解析

java - Long 包含许多 int

java - 如何从arraylist中检索多个值到jsp页面

android - Android 版 WSS4J

android - ScrollView 只能承载一个直接子级,但它只有一个

javascript - 如何在 JavaCC 中实现对 token 的负 LOOKAHEAD 检查?

c++ - 我可以根据 C++ 中的输入通过相同的方法返回不同的对象吗?

java - 根据扩展名 Java 获取某个文件名

java - 在 mysql 8.0 中输入图像会导致空值或仅包含 4 个字节