将十六进制字符串解析为整数会引发NumberFormatException?

mat*_*ean 36 java hex integer parseint

所以,在Java中,您知道如何声明这样的整数:

int hex = 0x00ff00;
Run Code Online (Sandbox Code Playgroud)

我认为你应该能够扭转这个过程.我有这个代码:

Integer.valueOf(primary.getFullHex());
Run Code Online (Sandbox Code Playgroud)

其中primary是自定义Color类的对象.它的构造函数采用Integer表示不透明度(0-99)和十六进制字符串(例如00ff00).

这是getFullHex方法:

public String getFullHex() {
    return ("0x" + hex);
}
Run Code Online (Sandbox Code Playgroud)

当我调用这个方法时,它给出了我的NumberFormatException:

java.lang.NumberFormatException: For input string: "0xff0000"
Run Code Online (Sandbox Code Playgroud)

我无法理解发生了什么.有人可以解释一下吗?

Tom*_*icz 82

这会有帮助吗?

Integer.parseInt("00ff00", 16)
Run Code Online (Sandbox Code Playgroud)

16意味着您应该将字符串解释为基于16(十六进制).通过使用2你可以解析二进制数,8代表八进制.10是默认值并解析十进制数.

在你的情况下,Integer.parseInt(primary.getFullHex(), 16)由于0x前缀的前缀将无法工作getFullHex()- 摆脱,你会没事的.

  • 我来这里是为了寻找一个优雅的解决方案来摆脱 0x_。所以 -1 表示没有提及`Integer.decode()`。 (2认同)

nos*_*nos 37

Integer.valueOf(string)假定为十进制表示.您必须指定该数字是十六进制格式,例如

int value = Integer.valueOf("00ff0000", 16); 
Run Code Online (Sandbox Code Playgroud)

注意Integer.valueOf(string,16); 不接受前缀0x.如果你的字符串包含0x前缀,你可以使用Integer.decode("0x00ff0000");

  • "Integer.decode"怎么不是正确的答案? (9认同)
  • 但感谢我的回复+投票.现在我得到另一个解决方案:int color = Color.parseColor("#"+"803bb9ff"); (3认同)
  • `Integer.decode`正是我所需要的! - 它基本上是parseInt,但处理更多种输入格式 (3认同)

Kon*_*bun 24

尝试使用解码方法:

Integer.decode("0x00ff00");
Run Code Online (Sandbox Code Playgroud)

DecodableString:

  • Signopt DecimalNumeral
  • Signopt 0x HexDigits
  • Signopt 0X HexDigits
  • Signopt #HexDigits
  • Signopt 0 OctalDigits

你可以在这里读到它 https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#decode(java.lang.String)

  • 最佳答案恕我直言。 (2认同)