2015-03-24 2 views
-2

Я пытаюсь сделать парсер кода цветового кода minecraft. Я беру исходный текст из текстового поля и отображаю полученный текст в богатом текстовом поле. Оригинальный текст будет выглядеть примерно так:Minecraft Цветовой код парсера

& 4Red

Здесь &4 означает, что текст после того, как это должно быть красного цвета.

абв & 4Red & fWhite

Этот текст должен выглядеть аЬс в цвет по умолчанию (черный), "Красный" в красном цвете, "Белый" в белом.

Итак, как я могу разобрать текст для разделения текста на «abc», «& 4Red» и «& fWhite»?

+0

Какие у вас проблемы? Вы еще что-нибудь пробовали? –

+0

Конечно, я пробовал, но я понятия не имею, как отделить фрагменты текста, как «abc», «& 4Red» и «& fWhite» в приведенном выше тексте. –

+1

Если вам нужна синтаксическая обработка строк, спросите о разбор строк. Ваш вопрос прямо сейчас звучит так, как будто вы просите нас сделать это для вас. –

ответ

3

Вы должны узнать о

  1. Основные C#
  2. Regex
  3. LINQ
  4. Анонимные типы
  5. Делегаты

но это делает трюк:

 var txt = "abc&4Red&fWhite"; 

     // Add color code Black for first item if no color code is specified 
     if (!txt.StartsWith("&")) 
      txt = "&0" + txt; 

     // Create a substrings list by splitting the text with a regex separator and 
     // keep the separators in the list (e.g. ["&0", "abc", "&4", "Red", "&f", "White"]) 
     string pattern = "(&.)"; 
     var substrings = Regex.Split(txt, pattern).Where(i => !string.IsNullOrEmpty(i)).ToList(); 

     // Create 2 lists, one for texts and one for color codes 
     var colorCodes = substrings.Where(i => i.StartsWith("&")).ToList(); 
     var textParts = substrings.Where(i => !i.StartsWith("&")).ToList(); 

     // Combine the 2 intermediary list into one final result 
     var result = textParts.Select((item, index) => new { Text = item, ColorCode = colorCodes[index] }).ToList(); 
+0

LINQ - это то, чему я не мог научиться должным образом. –

+1

Ну да, я узнал это сейчас. :) –

Смежные вопросы