着色 C# 控制台无法正常工作
本文关键字:工作 常工作 控制台 着色 | 更新日期: 2023-09-27 17:56:03
我需要按方法对字符串进行着色,所以我使用Console.ForegroundColor
属性并稍后编写文本,但我在某处犯了一个错误,所以所有行都是一种颜色。还是有更好的解决方案?我需要按 &0-&f(十六进制)对字符串进行着色并将其输出到控制台,这是我的解决方案:
public static void ColorizeConsoleMessage(string message)
{
var matches = Regex.Matches(message, "&+[0-9a-f]");
var split = Regex.Split(message, "&+[0-9a-f]");
var def = Console.ForegroundColor;
var i = 0;
foreach (var match in matches)
{
switch (match.ToString().Replace("&", "").ToCharArray()[0])
{
case '0':
Console.ForegroundColor = ConsoleColor.White;
break;
case '1':
Console.ForegroundColor = ConsoleColor.Gray;
break;
case '2':
Console.ForegroundColor = ConsoleColor.DarkGray;
break;
case '3':
Console.ForegroundColor = ConsoleColor.Black;
break;
case '4':
Console.ForegroundColor = ConsoleColor.Red;
break;
case '5':
Console.ForegroundColor = ConsoleColor.Green;
break;
case '6':
Console.ForegroundColor = ConsoleColor.Blue;
break;
case '7':
Console.ForegroundColor = ConsoleColor.Yellow;
break;
default:
Console.ForegroundColor = ConsoleColor.White;
break;
}
Console.Write(split[i]);
i++;
}
Console.WriteLine();
Console.ForegroundColor = def;
}
并测试:EventManager.ColorizeConsoleMessage("&4Hello, &6world!");
唯一的解决方法是
var i = 1;
Regex.Split正在split[]中创建一个空的字符串元素,它弄乱了所有的索引值。
public static void ColorizeConsoleMessage(string message)
{
MatchCollection matches = Regex.Matches(message, "&+[0-9a-f]");
string[] split = Regex.Split(message, "&+[0-9a-f]");
ConsoleColor def = Console.ForegroundColor;
int i = 1;
foreach (Match match in matches)
{
switch (match.Value[1])
{
case '0':
Console.ForegroundColor = ConsoleColor.White;
break;
case '1':
Console.ForegroundColor = ConsoleColor.Gray;
break;
case '2':
Console.ForegroundColor = ConsoleColor.DarkGray;
break;
case '3':
Console.ForegroundColor = ConsoleColor.Black;
break;
case '4':
Console.ForegroundColor = ConsoleColor.Red;
break;
case '5':
Console.ForegroundColor = ConsoleColor.Green;
break;
case '6':
Console.ForegroundColor = ConsoleColor.Blue;
break;
case '7':
Console.ForegroundColor = ConsoleColor.Yellow;
break;
default:
Console.ForegroundColor = ConsoleColor.White;
break;
}
Console.Write(split[i]);
i++;
}
Console.WriteLine();
Console.ForegroundColor = def;
}
好吧,
你是右的Regex.Matchs和Regex.Split一起让事情变得有点尴尬,所以我把它们结合起来
public static void ColorizeConsoleMessage(string message)
{
MatchCollection matches = Regex.Matches(message, "&+([0-9a-f])([^&]+)");
ConsoleColor def = Console.ForegroundColor;
foreach (Match match in matches)
{
switch (match.Groups[1].Value[0])
{
case '0':
Console.ForegroundColor = ConsoleColor.White;
break;
case '1':
Console.ForegroundColor = ConsoleColor.Gray;
break;
case '2':
Console.ForegroundColor = ConsoleColor.DarkGray;
break;
case '3':
Console.ForegroundColor = ConsoleColor.Black;
break;
case '4':
Console.ForegroundColor = ConsoleColor.Red;
break;
case '5':
Console.ForegroundColor = ConsoleColor.Green;
break;
case '6':
Console.ForegroundColor = ConsoleColor.Blue;
break;
case '7':
Console.ForegroundColor = ConsoleColor.Yellow;
break;
default:
Console.ForegroundColor = ConsoleColor.White;
break;
}
string str_to_print = match.Groups[2].Value;
Console.Write(str_to_print);
}
Console.WriteLine();
Console.ForegroundColor = def;
}