【问题标题】:How to change Foreground Color of each letter in a string in C# Console?如何在 C# 控制台中更改字符串中每个字母的前景色?
【发布时间】:2020-09-30 03:05:05
【问题描述】:

我想问一下,如何才能用我想要的特定颜色更改字符串中特定字母的颜色。

例如:

string letters = "Hello World";  //The string inputted.

我想把“Hello”中的“o”改成红色。我怎么做?我知道

Console.Foreground = ConsoleColor.Red;

会将整个字符串更改为红色。用特定颜色更改特定字母的最佳代码是什么?提前致谢!

【问题讨论】:

    标签: c# console


    【解决方案1】:

    最直接的解决方案是

    var o = letters.IndexOf('o');
    Console.Write(letters.Substring(0, o));
    Console.ForegroundColor = ConsoleColor.Red;
    Console.Write(letters[o]);
    Console.ResetColor();
    Console.WriteLine(letters.Substring(o + 1));
    

    您还可以将其概括为适用于您想要着色的任意字符串或字母的函数:

    void WriteLineWithColoredLetter(string letters, char c) {
      var o = letters.IndexOf(c);
      Console.Write(letters.Substring(0, o));
      Console.ForegroundColor = ConsoleColor.Red;
      Console.Write(letters[o]);
      Console.ResetColor();
      Console.WriteLine(letters.Substring(o + 1));
    }
    

    另一种选择可能是使用"Hell&o World" 之类的字符串并解析其中& 表示以红色打印以下字母。

    【讨论】:

    • Console.ResetColor() 可以用来重置颜色。
    • 哦,很好。学到了一些新东西。但是,当您在程序的其他地方更改颜色时,这将无济于事。
    • 它将前景和背景控制台颜色设置为默认值,因此您无需保留旧值并将其重新分配。无论如何 1+
    • 我现在知道了。但是默认值是在程序开始时采用的,因此如果您在其他地方进行颜色处理(例如让您的程序在黑色上完全绿色),则可能不合适。但事实上,对于这样做的人来说,这是一件需要担心和微不足道的小事。我编辑了它。
    【解决方案2】:
    string letters = "Hello World";
    Char[] array = letters.ToCharArray();
    
    foreach (Char c in array)
    {
        if (c == 'o')
        {
            Console.ForegroundColor = System.ConsoleColor.Red;
            Console.Write(c);
        }
        else
        {
            Console.ForegroundColor = System.ConsoleColor.White;
            Console.Write(c);
        }
    }
    Console.WriteLine();
    Console.Read();
    

    【讨论】:

    • 这也会为World 中的o 着色,据我所知,这不是必需的。
    • 对,对。这里凌晨 1 点,开始漂移。
    • 嗯,技术上这并没有错,因为Hello 中的o 也是红色的;)
    【解决方案3】:

    我知道我迟到了,但我找到了一个非常适合原始海报的解决方案。

    我将举一个使用彩虹显示器的例子,它可以单独适应文本中所需的独特字母和颜色:

    Console.ForegroundColor = ConsoleColor.Red; Console.Write("H");
    Console.ForegroundColor = ConsoleColor.DarkYellow; Console.Write("e")
    Console.ForegroundColor = ConsoleColor.Yellow; Console.Write("l");
    Console.ForegroundColor = ConsoleColor.Green; Console.Write("l");
    Console.ForegroundColor = ConsoleColor.Blue; Console.Write("o ");
    Console.ForegroundColor = ConsoleColor.DarkMagenta; Console.Write("W");
    Console.ForegroundColor = ConsoleColor.Magenta; Console.Write("o");
    Console.ForegroundColor = ConsoleColor.Cyan; Console.Write("r");
    Console.ForegroundColor = ConsoleColor.White; Console.Write("l");
    Console.ForegroundColor = ConsoleColor.DarkYellow; Console.Write("d.\n\n");
    Console.ResetColor();
    

    希望这可以帮助其他人找到在 C# 行中单独为字符着色的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-27
      • 1970-01-01
      • 1970-01-01
      • 2018-10-29
      • 1970-01-01
      • 2011-08-30
      • 1970-01-01
      • 2019-09-29
      相关资源
      最近更新 更多