Java 从整数生成十六进制值
我试图从整数输入生成十六进制颜色值,但我不确定是否正确使用了concat方法。当我输出字符串颜色时,我只得到“0x”,有什么想法吗Java 从整数生成十六进制值,java,Java,我试图从整数输入生成十六进制颜色值,但我不确定是否正确使用了concat方法。当我输出字符串颜色时,我只得到“0x”,有什么想法吗 public String generateColor(String redVal, String blueVal, String greenVal, String alphaVal){ String theColor = "0x"; theColor.concat(alphaVal); theColor.concat(r
public String generateColor(String redVal, String blueVal,
String greenVal, String alphaVal){
String theColor = "0x";
theColor.concat(alphaVal);
theColor.concat(redVal);
theColor.concat(greenVal);
theColor.concat(blueVal);
return theColor;
}
您需要将其重新分配给theColor,因为concat()方法返回一个带有连接的字符串 像
您需要将其重新分配给theColor,因为concat()方法返回一个带有连接的字符串 像
字符串的
concat
不会修改原始字符串(字符串是Java格式的)。我建议在这里使用StringBuilder
:
public String generateColor(String redVal, String blueVal, String greenVal, String alphaVal) {
StringBuilder theColor = new StringBuilder("0x")
.append(alphaVal)
.append(redVal)
.append(greenVal)
.append(blueVal);
return theColor.toString();
}
字符串的
concat
不会修改原始字符串(字符串是Java格式的)。我建议在这里使用StringBuilder
:
public String generateColor(String redVal, String blueVal, String greenVal, String alphaVal) {
StringBuilder theColor = new StringBuilder("0x")
.append(alphaVal)
.append(redVal)
.append(greenVal)
.append(blueVal);
return theColor.toString();
}
java中的字符串对象是不可变的,即像
concat
这样的操作不会修改原始对象,而是创建新对象。您需要修改代码以将修改后的值指定给颜色:
theColor = theColor.concat(alphaVal);
java中的字符串对象是不可变的,即像
concat
这样的操作不会修改原始对象,而是创建新对象。您需要修改代码以将修改后的值指定给颜色:
theColor = theColor.concat(alphaVal);
如果您的输入字符串都是两个十六进制数字的两个字符字符串,那么您可以非常简单地生成所需的字符串:
public String generateColor(String redVal, String blueVal,
String greenVal, String alphaVal) {
return "0x" + alphaVal + redVal + greenVal + blueVal;
}
无需在StringBuilder
或concat
上胡闹
如果输入字符串是从整数转换而来的,因此您不能确定它们是否是两个十六进制数字,那么上述方法将不起作用。但是使用concat
或StringBuilder
的append
的解决方案也不起作用,因为它们基本上与+
做相同的事情——它们只是将所有字符串连接在一起
要问的第一个问题是,您是否过早地将整数转换为字符串?如果将整数转换为字符串,然后将字符串作为参数传递给generateColor
,然后担心字符串的格式不正确,那么实际上应该将整数传递给generateColor
,而不是字符串,并让generateColor
将它们转换为所需的字符串类型。有几种方法可以做到这一点;这里有一个:
public String generateColor(int redVal, int blueVal,
int greenVal, int alphaVal) {
return String.format("0x%02x%02x%02x%02x", alphaVal & 0xFF,
redVal & 0xFF, greenVal & 0xFF, blueVal & 0xFF);
}
%02x
要求将下一个参数的格式设置为十六进制(x
),并将其转换为2个字符宽的字符串(2
),如果值只有一个十六进制数字(0
),则用前导零代替空格填充。如果整数值太大,无法容纳两位数字,格式
将在字符串中包含三个或更多字符,这就是为什么我在每个整数上使用&0xFF
,以确保值不会太大<代码>%02x不在前面放置一个0x
。格式字符串有自己的0x
,用于将这两个字符放入结果中。(如果需要,可以使用%02X
而不是%02X
,这会导致十六进制数字A-F以大写形式出现。)
还有其他方法:您可以使用
&
、|
和从四个输入整数创建一个int
,如果您的输入字符串都是两个十六进制数字的两个字符字符串,那么您只需生成所需的字符串:
public String generateColor(String redVal, String blueVal,
String greenVal, String alphaVal) {
return "0x" + alphaVal + redVal + greenVal + blueVal;
}
无需在StringBuilder
或concat
上胡闹
如果输入字符串是从整数转换而来的,因此您不能确定它们是否是两个十六进制数字,那么上述方法将不起作用。但是使用concat
或StringBuilder
的append
的解决方案也不起作用,因为它们基本上与+
做相同的事情——它们只是将所有字符串连接在一起
要问的第一个问题是,您是否过早地将整数转换为字符串?如果将整数转换为字符串,然后将字符串作为参数传递给generateColor
,然后担心字符串的格式不正确,那么实际上应该将整数传递给generateColor
,而不是字符串,并让generateColor
将它们转换为所需的字符串类型。有几种方法可以做到这一点;这里有一个:
public String generateColor(int redVal, int blueVal,
int greenVal, int alphaVal) {
return String.format("0x%02x%02x%02x%02x", alphaVal & 0xFF,
redVal & 0xFF, greenVal & 0xFF, blueVal & 0xFF);
}
%02x
要求将下一个参数的格式设置为十六进制(x
),并将其转换为2个字符宽的字符串(2
),如果值只有一个十六进制数字(0
),则用前导零代替空格填充。如果整数值太大,无法容纳两位数字,格式
将在字符串中包含三个或更多字符,这就是为什么我在每个整数上使用&0xFF
,以确保值不会太大<代码>%02x
不在前面放置一个0x
。格式字符串有自己的0x
,用于将这两个字符放入结果中。(如果需要,可以使用%02X
而不是%02X
,这会导致十六进制数字A-F以大写形式出现。)
还有其他方法:您可以使用
&
、|
和从四个输入整数创建一个int
,我知道您在这里要做什么,但是如果您有一个JavaColor
类,您可以调用getRGB()
,然后将整数转换为单个值。在Java中,String
对象是不可变的。@markspace在这里有最好的解决方案。我知道您在这里要做什么,但是如果您有JavaColor
类,您可以调用getRGB()
,然后将整数转换为单个值。在Java中,String
对象是不可变的。@markspace有最好的解决方案就是这样,我正在将它们从integer->hex转换。因此,它们可能并不总是两位数。我现在想知道如何强制它们是2位数。那么,所有的