在我的应用程序中,我使用转换器从3个值创建> RGB颜色为十六进制值。 我用它在运行时在我的应用程序中设置渐变背景。
现在这是以下问题。
转换器的结果是(String)
#45E213
,并且不能存储在整数中。
但是当你创建一个整数时,
int hex = 0x45E213;
它确实可以正常工作,而且不会出错。
现在我知道了这一点,我将#
替换为0x
,并尝试将其从String转换为Integer。
int hexToInt = new Integer("0x45E213").intValue();
但现在我得到了numberFormatException
,因为在转换时,它会与字符E
不一致吗?
我该如何解决这个问题?因为我真的需要它作为整数或Java / Eclipse不会在它的方法中使用它。
答案 0 :(得分:12)
http://docs.oracle.com/javase/6/docs/api/java/lang/Integer.html
带有字符串的Integer构造函数与带有基数10的parseInt的行为相同。您可能希望String.parseInt带有基数16.
Integer.parseInt("45E213", 16)
或切断0x
Integer.parseInt("0x45E213".substring(2), 16);
或
Integer.parseInt("0x45E213".replace("0x",""), 16);
答案 1 :(得分:7)
鲜为人知的Integer.decode(String)在这里可能很有用。请注意,它也会以八进制为前导零,你可能不想要它,但如果你正在寻找便宜又开朗的东西......
int withHash = Integer.decode("#45E213");
System.out.println(Integer.toHexString(withHash));
int withZeroX = Integer.decode("0x45E213");
System.out.println(Integer.toHexString(withZeroX));
输出
45e213
45e213
答案 2 :(得分:4)
此方法接受您的String
您可以使用Color.parseColor(String)
,但需要将0x
前缀替换为#