2015-06-28 25 views
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"; 

我需要的東西,將接受一個字符串,如

本文現在是彩虹!

和將遍歷每個char和地方「§one」 - 在前期「§eight」上色每個字母。

我使用字符串替換#(字符串,字符串)然而,這並不接受一個char嘗試。我使用沿着

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

線的東西但是這也不能工作也試過。任何幫助和/或指針您可以提供將不勝感激:)謝謝

編輯:所需的輸出採樣線

用戶並/彩虹本文是彩虹!

輸出:§4T§6h§ei§as§bt§9e§5x§dt...等,但重起§4

+0

聽起來像'StringBuilder'的工作。你總是可以循環遍歷每個字符,將前綴+字符添加到一個StringBuilder中,然後使用構建器完成結果,或者你可以使用insert方法插入東西。 –

+0

另外,不要使用'toCharArray )'。只需使用'message.length()'來防止每次創建多餘的對象。字符串是不可變的,所以任何修改它的嘗試都會創建一個新的String對象。由於'char []'允許你修改'String','toCharArray()'返回一個* new *'char []'對象,而不是'String'的實際'char []'。 –

回答

4

,如果你存儲你的顏色在數組中會更容易。將顏色數量存儲在變量中,以便您不會在循環中繼續執行colors.length。通過字符數組

StringBuilder builder = new StringBuilder(); 

循環:

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

創建一個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

+0

陣列真棒的想法,我一定會實施!然而,當我嘗試了其餘的代碼時,它會在方括號內添加同色系版本的字符串,任何想法爲什麼? – Jaydin

+0

@Jaydin你是指'§'?我雖然想要在一切前面?你現在得到什麼輸出? –

+0

@Jaydin你可以發佈你想要的樣子嗎? –

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();