Java 循环遍历字符串,并在每个字符前面加上不同的值

Java 循环遍历字符串,并在每个字符前面加上不同的值,java,bukkit,bungeecord,Java,Bukkit,Bungeecord,我正在使用Bungeecord为我的Minecraft服务器开发一个命令,需要一种方法在字符串中每个字符的开头添加不同的颜色代码。我的希望是,我可以把他们进入的任何字符串变成彩虹色印刷品。我被要求使用8种不同的颜色代码,并对通过的每8个字符重复序列 我已经注册了这个命令和类似的东西,它工作正常,我遇到的问题是字符串操作。我知道我可以使用循环字符串 String message; for (int i = 0; i < message.toCharArray().size(); i++) {

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

我已经注册了这个命令和类似的东西,它工作正常,我遇到的问题是字符串操作。我知道我可以使用循环字符串

String message;
for (int i = 0; i < message.toCharArray().size(); i++)
{
  char c = message.charAt(i);
  //Prefix code here
}
我需要的是能够接受字符串的东西,比如

这段文字现在是彩虹

将循环遍历每个字符,并在前面放置“§1”-“§8”,为每个字母上色

我尝试过使用String#replace(String,String),但是它不接受字符。我还试着使用一些类似于

String.replace("" + c, "§" + one + c);
然而,这也不起作用。如果您能提供任何帮助和/或建议,我们将不胜感激:)谢谢

编辑:所需输出的采样行

用户做/rainbow此文本为rainbow


输出:§4T§6h§ei§as§bt§9e§5x§dt…等,但从§4重新启动处理此问题的最简单方法是循环遍历每个字符,然后将其与前缀一起添加到
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();
StringBuilder=新建StringBuilder();
对于(int i=0;i
处理此问题的最简单方法是循环遍历每个字符,然后将其与前缀一起添加到
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();
StringBuilder=新建StringBuilder();
对于(int i=0;i
如果将颜色存储在一个数组中,会更容易。将颜色的数量存储在变量中,这样您就不会在循环中继续执行
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));
}

如果您想在每个字符之间留一个空格或新行,只需执行builder.append
/n

将颜色存储在数组中会更容易。将颜色的数量存储在变量中,这样您就不会在循环中继续执行
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));
}

如果您想在每个字符之间留一个空格或新行,只需执行builder.append
/n

听起来像是
StringBuilder
的工作。您可以始终循环遍历每个字符,将前缀+字符添加到
StringBuilder
,然后使用生成器生成完成的结果,或者可以使用
insert
方法插入内容。另外,不要使用
tocharray()
。只需使用
message.length()
即可防止每次创建过多的对象。字符串是不可变的,因此任何修改字符串的尝试都会创建一个新的字符串对象。由于
char[]
允许您修改
String
toCharArray()
返回一个新的
char[]
对象,而不是该
String
的实际
char[]
。听起来像是
StringBuilder
的作业。您可以始终循环遍历每个字符,将前缀+字符添加到
StringBuilder
,然后使用生成器生成完成的结果,或者可以使用
insert
方法插入内容。另外,不要使用
tocharray()
。只需使用
message.length()
即可防止每次创建过多的对象。字符串是不可变的,因此任何修改字符串的尝试都会创建一个新的字符串对象。由于
char[]
将允许您修改
String
toCharArray()
返回一个新的
char[]
对象,而不是该
String
的实际
char[]
。使用该数组的好主意,我一定会实现它!但是,当我尝试代码的其余部分时,它在方括号内的彩色版本前面追加了相同的字符串,知道为什么吗?@Jaydin你指的是
§
?我以为你想在所有事情面前都这么做?你现在得到的是什么输出?@Jaydin你能发布一个输出的示例行吗?这是我得到的,我也编辑了这篇文章以包含所需的内容output@Jaydin您需要将
message.tocharray().size()
更改为
message.tocharray().length
。我更新了我的代码。关于数组的好主意,我一定会实现的!但是,当我尝试代码的其余部分时,它在方括号内的彩色版本前面追加了相同的字符串,知道为什么吗?@Jaydin你指的是
§
?我以为你想在所有事情面前都这么做?你现在得到的是什么输出?@Jaydin你能发布一个输出的示例行吗?这是我得到的,我也编辑了这篇文章以包含所需的内容output@Jaydin您需要将
message.tocharray().size()
更改为
message.tocharray().length
。我更新了我的代码。