【问题标题】:C# Console table is not alignedC# 控制台表未对齐
【发布时间】:2021-04-23 11:11:37
【问题描述】:

我设法在控制台中创建了一个简单的 C# 表,这方面的线程已经足够多。 问题是由于字符的大小不同(例如 'iiiiii'(5 chars) 比 'there'(5 chars) 短)表格永远不会对齐。

有没有办法计算字符串值的实际长度,以便知道需要添加多少空格才能将较短的字符串与表格的其余部分对齐?

(我尝试在此处直观地显示它,但似乎在此站点使用的字体中,所有字符的大小(和/或填充)都相同,但是,我可以发送屏幕截图)

【问题讨论】:

  • 为什么不直接使用等宽字体?
  • 向我们的朋友展示如何以编程方式将他的控制台设置为等宽
  • 您可以使用这样的表格:stackoverflow.com/a/56852366/8655660
  • 我们可能需要一些代码来准确查看您在此处使用的控制台...如果是标准的 Windows 控制台(“CMD”),您不能以编程方式设置它,因为可以设置警察通过更改控制台应用程序本身的属性。
  • 我的主要问题是控制台不是 CMD 可悲...这是统一的,我需要它进行调试,但无法更改其中的字体。

标签: c# string


【解决方案1】:

您应该将实际的制表符(\t 转义序列)嵌入到每个输出字符串中,而不是尝试手动将文本对齐到具有任意空格字符串的列中。

Console.WriteLine("Row1:" + "\t"
    + "iiiiiii" );
Console.WriteLine("Row2:" + "\t"
    + "7 chars" );

【讨论】:

  • 我在这个例子中没有使用空格,我使用了 String.Format (String.Format("{0,-20}{1}", "Row1:", "iiiiiii") + " \n" + String.Format("{0,-20}{1}", "Row2:", "7 chars");
  • Tho...如果 String.Format 使用空格,我不会感到惊讶...
【解决方案2】:

如果您知道控制台字体名称和大小,您可以尝试使用TextRenderer.MeasureText 来获取以像素为单位的字符串宽度。然后给较短的空格添加空格,直到字符串对齐。

当然你不会通过这种方式获得精确的定位,但它可能会满足你的需要。

UPD。您可以参考How to measure the pixel width of a digit in a given font / size (C#) 和/或其他类似问题了解更多详情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 2012-05-05
    • 2017-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多