C# 控制台字符串填充 unicode 字符
C# console string padding with unicode characters
我正在使用 Console
class 打印一些有时包含 Unicode 字符的结果。使用String.PadRight
的传统填充方法无法正常工作,因为某些Unicode 字符在字符串中占用一个字符,但在屏幕上占用两个字符。这是代码:
Console.Out.WriteLine("123".PadRight(10, '-'));
Console.Out.WriteLine("xxxxxx".PadRight(10, '-'));
Console.Out.WriteLine("你好".PadRight(10, '-'));
在输出中,前两行在同一位置结束,而第三行多了两个字符。代码页为:936 (ANSI/OEM - 简体中文 GBK).
所以我想知道是否有办法在打印到控制台屏幕时获取字符串的实际宽度。谢谢!
您可以通过检查当前光标位置在输出后进行填充,例如:
private static void WriteConsolePadded(string value, int length, char padValue)
{
Console.Write(value);
if (Console.CursorLeft < length)
{
Console.Write(new string(padValue, length - Console.CursorLeft));
}
Console.WriteLine();
}
(显然,除了 很多 更多的想法来更好地命名方法和参数)
然后你会:
WriteConsolePadded("123",10, '-');
WriteConsolePadded("xxxxxx",10, '-');
WriteConsolePadded("你好",10, '-');
(其他变体也可能有意义,例如在输出前测量起始位置,而不是仅仅假设它总是在最左边的位置)
我正在使用 Console
class 打印一些有时包含 Unicode 字符的结果。使用String.PadRight
的传统填充方法无法正常工作,因为某些Unicode 字符在字符串中占用一个字符,但在屏幕上占用两个字符。这是代码:
Console.Out.WriteLine("123".PadRight(10, '-'));
Console.Out.WriteLine("xxxxxx".PadRight(10, '-'));
Console.Out.WriteLine("你好".PadRight(10, '-'));
在输出中,前两行在同一位置结束,而第三行多了两个字符。代码页为:936 (ANSI/OEM - 简体中文 GBK).
所以我想知道是否有办法在打印到控制台屏幕时获取字符串的实际宽度。谢谢!
您可以通过检查当前光标位置在输出后进行填充,例如:
private static void WriteConsolePadded(string value, int length, char padValue)
{
Console.Write(value);
if (Console.CursorLeft < length)
{
Console.Write(new string(padValue, length - Console.CursorLeft));
}
Console.WriteLine();
}
(显然,除了 很多 更多的想法来更好地命名方法和参数)
然后你会:
WriteConsolePadded("123",10, '-');
WriteConsolePadded("xxxxxx",10, '-');
WriteConsolePadded("你好",10, '-');
(其他变体也可能有意义,例如在输出前测量起始位置,而不是仅仅假设它总是在最左边的位置)