【问题标题】:How to in C# keep a set number of letters for a string in console writeline如何在 C# 中为控制台写入行中的字符串保留一组字母
【发布时间】:2013-01-06 22:36:18
【问题描述】:

好吧,基本上我想要类似的东西

Console.WriteLine(
    "{0}:   {1}/{2}hp    {3}/{4}mp   {5}", 
    character.Identifier, 
    character.CurrentHealth, 
    character.MaxHealth,
    character.CurrentMagic, 
    character.MaxMagic, 
    character.Fatigue
    );

然后让 character.Identifier(基本上是一个名称)有一组字母,如果需要,它将用空格替换,以便可以打印

Josh:   20/20hp    20/20mp   3

J:      20/20hp    20/20mp   3

但是 HP 然后 mp 和其他一切总是一致的。 我知道它可能是 {0:} 之一,但我想不出一个可行的

【问题讨论】:

标签: c# console.writeline


【解决方案1】:

{0} 表示法中的第二个参数可以为您提供一个固定宽度的字段,因此如果您希望标识符(名称)的长度始终为 10 个字符并左对齐,您可以使用 {0,-10}

MSDN 也是解决此类问题的好资源,如果您阅读 String.Format 的文档,它有一个固定宽度表格的示例,可能与您想要的类似。

此外,正如 Hogan 的回答正确指出的那样,如果您希望在名称旁边添加 :,则必须将其附加到格式字符串之外的字符串中。

【讨论】:

  • 这不起作用:S Console.WriteLine("{0,15}: {1}/{2}hp {3}/{4}mp {5}", character.Identifier , character.CurrentHealth, character.MaxHealth, character.CurrentMagic, character.MaxMagic, character.Fatigue); Console.WriteLine("********************************");
  • @bed - 问题是: - 请参阅我的答案。另外,你用负数左对齐而不是右对齐。
【解决方案2】:

你可以用空格右填充字符串:

character.Identifier.PadRight(10);

这应该会给你你所追求的格式。

【讨论】:

  • 最佳答案 IMO!
【解决方案3】:

我相信这会做你想要的:

const int colWidth = 10;
Console.WriteLine("{0,-"+colWidth.ToString()+"}{1,-"+colWidth.ToString()+"}{2,-"+colWidth.ToString()+"}{3}", 
    (character.Identifier+":").PadRight(colWidth+1).Remove(0,colWidth),
    (character.CurrentHealth+"/"+character.MaxHealth+"hp").PadRight(colWidth+1).Remove(0,colWidth),
    (character.CurrentMagic+"/"+character.MaxMagic+"mp").PadRight(colWidth+1).Remove(0,colWidth),
    (character.Fatigue,colWidth));

这将在字符串末尾添加空格,然后截断结果。
请参阅 String.Format 的文档

注意事项

我将: 附加到格式字符串之外的名称中,然后“合并” hp 和 mp 部分,然后将它们放在一个列中。

【讨论】:

  • 您是否曾经使用比指定格式长度更长的名称进行测试,例如“Josh0123456789”?
  • @KenKin - 我不需要测试,我知道格式与 {0,-10} 这样的说明符有什么关系,它会截断它。
  • 实际上像{0,-10}这样的格式不会截断。我不认为右对齐是错误。事实上,我测试了这两种对齐方式,我认为将冒号锚定在固定位置是合理的。
  • @KenKin - 好点 - 修复了这个问题并添加了一个 col 宽度常量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-08
  • 1970-01-01
  • 2016-03-16
  • 2011-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多