将一些十六进制字符串转换为十进制整数

新手上路,请多包涵

我写了一些代码将我的十六进制显示字符串转换为十进制整数。但是,当输入类似于 100a625b (带有字母的东西)时,我收到如下错误:

java.lang.NumberFormatException:对于输入字符串:“100a”在 java.lang.NumberFormatException.forInputString(未知来源)在 java.lang.Integer.parseInt(未知来源)

如何将带字母的字符串转换为十进制整数?

 if(display.getText() != null)
{
    if(display.getText().contains("a") || display.getText().contains("b") ||
       display.getText().contains("c") || display.getText().contains("d") ||
       display.getText().contains("e") || display.getText().contains("f"))
    {
        temp1 = Integer.parseInt(display.getText(), 16);
        temp1 = (double) temp1;
    }
    else
    {
        temp1 = Double.parseDouble(String.valueOf(display.getText()));
    }
}

原文由 vontarro 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 797
2 个回答

看起来你的字符串中有一个额外的(前导)空格字符( “100a” )。您可以使用 trim() 删除前导和尾随空格:

 temp1 = Integer.parseInt(display.getText().trim(), 16);

或者,如果您认为空格的存在意味着有其他问题,您将不得不自己调查,因为我们没有您的其余代码。

原文由 ajb 发布,翻译遵循 CC BY-SA 4.0 许可协议

public static int hex2decimal(String s) {
    String digits = "0123456789ABCDEF";
    s = s.toUpperCase();
    int val = 0;
    for (int i = 0; i < s.length(); i++) {
        char c = s.charAt(i);
        int d = digits.indexOf(c);
        val = 16*val + d;
    }
    return val;
}

这是 我在网上找到 的最高效优雅的解决方案。此处提供的其他一些解决方案并不总是适合我。

原文由 AlexAndro 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题