【问题标题】:formatting the string to look like a table将字符串格式化为表格
【发布时间】:2013-08-28 22:37:26
【问题描述】:

我有一个字符串,我已将其初始化为空并构建字符串,如下所示,我还得到了我想要的首选输出,这样做的最佳方法是什么,因为这将作为电子邮件发送。考虑到公司名称的长度会有所不同。

正在构建的字符串

foreach(string s in array)
{
emailBody += s + "          Success" + Environment.NewLine;
}

字符串的输出

CompanyName    Success
CompanyName       Success
CompanyName         Success
CompanyName           Success
CompanyName         Success
CompanyName            Success
CompanyName          Success

想要像下面这样的输出


CompanyName   |   Success
CompanyName   |   Success
CompanyName   |   Success
CompanyName   |   Success
CompanyName   |   Success
CompanyName   |   Success
CompanyName   |   Success

给出解决方案的输出

qxeawgentina                                           Success
TweseqmeChile                                           Success
Vidqwedal                                           Success
qwebr                                           Success
Doqa_brasil                                           Success
Sedaqqagentina                                           Success
KnaqwertArtina                                           Success

【问题讨论】:

  • 我建议你使用StringBuilder 而不是+=
  • 除了答案中所说的之外,请确保使用等宽字体...否则无法正确对齐列

标签: c# string


【解决方案1】:

PadLeft 是一个很好的函数,可以用于这样的事情。你可以这样做:

StringBuilder myString = new StringBuilder();
foreach(string s in array)
{
    myString.Append(s + "Success".PadLeft(15 - s.Length) + Environment.NewLine);
}
emailBody = myString.ToString();

将常量 15 更改为集合中最长的 CompanyName,否则 PadLeft 变为负数时会抛出异常。

(正如 cmets 中提到的那样,StringBuilder 也是一个好主意)

【讨论】:

  • 提示:在此处添加StringBuilder :)
  • 15 - s?不应该是15 - s.Length
  • @SonerGönül 是的,应该,还添加了StringBuilder
  • @SimonPatel Right 因此 PadLeft 将根据公司名称的长度而变化
  • 查看上面的输出我没有得到成功
【解决方案2】:

看看this StackOverflow Question

基本上你可以使用 string.Format 并指定每个占位符的宽度,如下所示:

// Prints "--123       --"
string.Format("--{0,-10}--", 123);
// Prints "--       123--"
string.Format("--{0,10}--", 123);

编辑: 将此应用于您的示例:

foreach(string s in array)
{
    emailBody += string.Format("{0, 25} | Success", s) + Environment.NewLine;
}

【讨论】:

  • 我不能这样做,因为它不是一个控制台,我需要保留整个字符串,因为它作为电子邮件发送
  • 只需使用 string.Format 并将结果放入变量或您需要对其进行的任何操作。 ;-) Console.WriteLine 恰好接受与 string.Format 相同的参数
  • 如果是电子邮件,请以html格式发送
  • @SimonPatel,你可以用 StringWriter 做同样的事情
【解决方案3】:

修剪你的字符串并计算最长的字符串长度:

int maxLength = 0;

foreach(string s in array)
{
    l = s.Trim().Length;
    if (l > maxLength)
    {
        maxLength = l;
    }
}

foreach(string s in array)
{
    emailBody += System.Format("{0,-" + maxLength.ToString() + "}    |    Success" + Environment.NewLine, s.Trim());
}

【讨论】:

  • 他想用列进行格式化,在这里修整不能解决他的问题
  • @Moeri 是的,我没有考虑尺寸的变化。我更新了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-03
  • 2014-10-15
  • 2010-10-07
  • 2014-10-03
  • 1970-01-01
相关资源
最近更新 更多