如何格式化中文字符以使它们适合列?

art*_*sch 6 c# string formatting cjk

我试图以列为导向的方式打印一些信息.一切都适用于拉丁字符,但是当打印中文字符时,列会停止对齐.我们来看一个例子:

var latinPresentation1 = "some text".PadRight(30) + "| " + 23;
var latinPresentation2 = "some longer text".PadRight(30) + "| " + 23;

Console.WriteLine(latinPresentation1);
Console.WriteLine(latinPresentation2);

Console.WriteLine("..............................................");

var chinesePresentation1 = "????".PadRight(30) + " | " + 23;
var chinesePresentation2 = "???????".PadRight(30) + "| " + 23;

Console.WriteLine(chinesePresentation1);
Console.WriteLine(chinesePresentation2);
Run Code Online (Sandbox Code Playgroud)

输出:

some text                     | 23
some longer text              | 23
.................................................
????                           | 23
???????                       | 23
Run Code Online (Sandbox Code Playgroud)

可以看出,中国人没有与专栏保持一致.重要提示:这只是对问题的介绍; 它不会在控制台应用程序中使用.谁能帮我这个?

小智 3

您可以使用System.Windows.Forms 程序集中的TextRenderer.MeasureText方法根据字符串宽度而不是字符数构建输出文本。

\n\n

这是 util 方法:

\n\n
public static string FillWithSpaces(this string text, int width, Font font)\n{\n    while (TextRenderer.MeasureText(text, font).Width < width)\n    {\n        text += \' \';\n    }\n    return text;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

以及用法:

\n\n
var font = new Font("Courier New", 10.0F);\nvar padding = 340;\n\nvar latinPresentation1 = "some text ".FillWithSpaces(padding, font) + "| 23";\nvar latinPresentation2 = "some longer text".FillWithSpaces(padding, font) + "| 23";\n\nvar chinesePresentation1 = "\xe4\xb8\x80\xe4\xba\x9b\xe6\x96\x87\xe5\xad\x97".FillWithSpaces(padding, font) + "| 23";\nvar chinesePresentation2 = "\xe4\xb8\x80\xe4\xba\x9b\xe8\xbc\x83\xe9\x95\xb7\xe7\x9a\x84\xe6\x96\x87\xe5\xad\x97".FillWithSpaces(padding, font) + "| 23";\n\nvar result = latinPresentation1 + Environment.NewLine +\n             latinPresentation2 + Environment.NewLine +\n             ".............................................." + Environment.NewLine +\n             chinesePresentation1 + Environment.NewLine +\n             chinesePresentation2; \n
Run Code Online (Sandbox Code Playgroud)\n\n

该解决方案需要填充参数(以 px 为单位)和使用的字体。

\n