1

我正在使用 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) 但这不接受字符。我也尝试使用类似的东西

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

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

编辑:所需输出的样本行

用户做 /rainbow 这个文本是彩虹!

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

4

2 回答 2

4

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

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

创建一个 StringBuilder:

StringBuilder builder = new StringBuilder();

循环遍历字符数组。将正确的颜色附加到字符。i%numColors如果您的消息字符串大于 8 个字符,则将允许颜色数组返回到开头,因为您的数组当前有 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.

于 2015-06-28T22:01:56.960 回答
1

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

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();
于 2015-06-28T21:59:18.033 回答