循环一个字符串,并为每个字符添加不同的值

时间:2015-06-28 21:30:15

标签: java bukkit bungeecord

我正在使用Bungeecord为我的Minecraft服务器开发一个命令,并且需要一种方法来在字符串中的每个字符的开头添加不同的颜色代码。希望我可以将他们输入的任何字符串打印成彩虹色。我被要求使用8种不同的颜色代码,并为每个通过的8个字符重复序列。

我已经注册了命令和所有类似的东西并且它有效,这是我遇到麻烦的字符串操作。我知道要循环使用字符串我可以使用

String message;
for (int i = 0; i < message.toCharArray().size(); i++)
{
  char c = message.charAt(i);
  //Prefix code here
}

我还定义了我想要使用的8种颜色

final String one = "4";
final String two = "6";
final String three = "e";
final String four = "a";
final String five = "b";
final String six = "9";
final String seven = "5";
final String eight = "d";

我需要的东西是接受字符串,例如

这个文字现在是彩虹!

并循环遍历每个字符并在前面放置“§one” - “§eight”为每个字母着色。

我尝试过使用String#replace(string,string)但是这不接受char。我也尝试过使用

的内容
String.replace("" + c, "§" + one + c);

然而,这也不起作用。您可以提供的任何帮助和/或指示将非常感谢:)谢谢

编辑:所需输出的样本行

用户做/彩虹这个文字是彩虹!

输出:§4T§6h§ei§as§bt§9e§5x§dt...等,但从§4重新启动

2 个答案:

答案 0 :(得分:4)

如果将颜色存储在数组中会更容易。将颜色数量存储在变量中,这样就不会在循环中继续colors.length

String [] colors = {"4", "6", "e", "a", "b", "9", "5", "d"};
int numColors = colors.length;

创建一个StringBuilder:

StringBuilder builder = new StringBuilder();

循环遍历字符数组。为角色添加正确的颜色。如果您的消息字符串大于8个字符,i%numColors将允许颜色数组返回到开头,因为您的数组当前有8个选项。

for(int i = 0; i < message.length(); i++){
    builder.append("§");
    builder.append(colors[i%numColors]);
    builder.append(message.charAt(i));
}

然后在方法结束时,只返回整个构建器字符串。

return builder.toString();

如果您想在每个字符之间添加空格或换行,只需执行builder.append ""/n

答案 1 :(得分:1)

处理此问题的最简单方法是循环遍历每个字符,然后将其与前缀一起添加到StringBuilder

StringBuilder builder = new StringBuilder();

for(int i = 0; i < message.length(); i++) {
    char currentLetter = message.charAt(i);

    if(currentLetter == ' ') //skip spaces; optional
        continue; 

    String prefix = ...; //grab a prefix
    builder.append(prefix + currentLetter);
}

String coloredMessage = builder.toString();