我正在尝试从整数输入生成十六进制颜色值,并且我不确定我是否正确使用了concat方法。当我输出字符串theColor时,我只得到" 0x",任何想法?
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;
}
答案 0 :(得分:3)
你需要将它重新分配给theColor,因为concat()方法返回一个带连接的字符串。
喜欢
theColor = theColor.concat(alphaVal);
答案 1 :(得分:2)
字符串' s concat
不会修改原始字符串(Java中的字符串为immutable)。我建议在这里使用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();
}
答案 2 :(得分:1)
java中的字符串对象是不可变的,像concat
之类的操作不会修改原始对象但会创建新对象。您需要修改代码以将修改后的值分配给theColor
:
theColor = theColor.concat(alphaVal);
答案 3 :(得分:0)
如果你的输入字符串都是带有两个十六进制数字的双字符串,那么你可以简单地生成你想要的字符串:
public String generateColor(String redVal, String blueVal,
String greenVal, String alphaVal) {
return "0x" + alphaVal + redVal + greenVal + blueVal;
}
无需愚弄StringBuilder
或concat
。
如果输入字符串是从整数转换而来的,那么你不确定它们是两个十六进制数字,那么上面的工作就不行了。但使用concat
或StringBuilder
append
的解决方案也不会起作用,因为它们基本上与+
做同样的事情 - 它们只是连接起来所有的字符串在一起。
要问的第一个问题是,你是否过早地将整数转换为字符串?如果你将整数转换为字符串,那么你将字符串作为参数传递给generateColor
,然后你担心字符串不是正确的格式,那么你真的应该通过你的< strong>整数到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
),并使用前导零填充而不是空格填充(如果value只有一个十六进制数字(0
)。如果整数值太大而不能容纳两位数,format
将在字符串中包含三个或更多字符,这就是我在每个整数上使用& 0xFF
以确保该值不会太大的原因大。 %02x
不将0x
放在前面。格式字符串有自己的0x
将这两个字符放入结果中。 (如果需要,您可以使用%02X
代替%02x
,这会导致十六进制数字A-F以大写字母显示。)
还有其他方法:您可以使用int
,&
和|
位运算符从四个输入整数中创建一个<<
,然后使用"0x%08x"
作为格式字符串。除了String.format
之外,还有一些方法能够生成十六进制整数。