Переберите строку и префикс каждого символа с различным значением

Я разрабатываю команду для моего сервера Minecraft с использованием Bungeecord и мне нужен способ добавить другой цветовой код в начало каждого символа в строке. Надежда состоит в том, что я могу превратить любую строку, в которую они входят, в печать цвета радуги. Меня попросили использовать 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);

Однако это тоже не сработало. Буду признателен за любую помощь и / или указатели, которые вы можете предоставить:) Спасибо

РЕДАКТИРОВАТЬ: образец строки желаемого выхода

Пользователь делает / Радуга Этот текст радуга!

Вывод: §4T§6h§ei§as §bt§9e§5x§dt ... и т. Д., Но перезапуск с §4

2 ответа

Решение

Будет проще, если вы храните свои цвета в массиве. Сохраняйте количество цветов в переменной, чтобы не продолжать 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,

Самый простой способ справиться с этим - перебрать каждый символ, а затем добавить его к 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();
Другие вопросы по тегам