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\npublic 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}\nRun Code Online (Sandbox Code Playgroud)\n\n以及用法:
\n\nvar 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; \nRun Code Online (Sandbox Code Playgroud)\n\n该解决方案需要填充参数(以 px 为单位)和使用的字体。
\n