我正在使用Console
类打印一些有时包含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)。
所以我想知道是否有一种方法可以在打印到控制台屏幕时获得字符串的实际宽度。谢谢!
答案 0 :(得分:2)
您可以通过检查当前光标位置来在输出后填充,例如:
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();
}
(显然,除了 lot 更多地考虑更好地命名方法和参数)
然后你会:
WriteConsolePadded("123",10, '-');
WriteConsolePadded("xxxxxx",10, '-');
WriteConsolePadded("你好",10, '-');
(其他变体也可能有意义,例如在输出前测量起始位置,而不是假设它始终位于最左侧位置)