从整数构建十六进制值

时间:2014-08-24 04:10:59

标签: java

我正在尝试从整数输入生成十六进制颜色值,并且我不确定我是否正确使用了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;
}  

4 个答案:

答案 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;
 } 

无需愚弄StringBuilderconcat

如果输入字符串是从整数转换而来的,那么你不确定它们是两个十六进制数字,那么上面的工作就不行了。但使用concatStringBuilder 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之外,还有一些方法能够生成十六进制整数。