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

von*_*rro 19 java hex type-conversion

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

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

你知道如何将我的字符串转换成十进制整数吗?

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()));
    }
}
Run Code Online (Sandbox Code Playgroud)

ajb*_*ajb 49

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

temp1 = Integer.parseInt(display.getText().trim(), 16 );
Run Code Online (Sandbox Code Playgroud)

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


Ale*_*dro 16

  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;
         }
Run Code Online (Sandbox Code Playgroud)

这是我在互联网上找到的最有效和最优雅的解决方案.这里提供的其他一些解决方案并不总是对我有用.