【问题标题】:Formatting a string properly正确格式化字符串
【发布时间】:2017-09-25 22:52:14
【问题描述】:

我有一个字符串,我想将其格式化为表格样式。目前它输出所有数据,但不在正确的列/行中。我希望它们排成一行并且不重叠。有什么帮助吗?谢谢

返回值的代码:

 public override string ToString()
        {
            return String.Format($"{DayValues}|{MonthValues}|{YearValues}|{TimeValues}|{TimestampValues}|{RegionValues}|{DepthValues}|{LatitudeValues}|{LongitudeValues}|{MagnitudeValues}|{IrisValues}");
        }

输出示例:

10|January |2014|07:20:46|1389338446|TURKEY|10.300|39.460|27.950|4.000|4371306
31|December |2013|15:06:14|1388502374|CRETE|26.500|34.390|25.310|4.200|4370886
29|December |2013|06:54:59|1388300099|NORTHWESTERN BALKAN REGION|10.000|43.100|17.190|4.700|4370801
28|December |2013|18:55:03|1388256903|CYPRUS REGION|46.900|35.670|31.350|4.500|4370887

【问题讨论】:

  • 如果您使用 $"",则不需要 String.Format。
  • “return”将它返回到我写出它的 main 中。那是需要编辑的吗?
  • 不,您可以删除 String.Format( 和关闭 ) --> return $"{DayValues}|{MonthValues}|{YearValues}|{TimeValues}|{TimestampValues}|{RegionValues} |{DepthValues}|{LatitudeValues}|{LongitudeValues}|{MagnitudeValues}|{IrisValues}";
  • 然后怎么办?
  • 如果你想居中,你需要自己计算填充。

标签: c# string formatting display


【解决方案1】:
public override string ToString()
{
    return $"{DayValues,2}|{MonthValues,-10}|{YearValues}|{TimeValues,8}|{TimestampValues,10}|{RegionValues,-40}|{DepthValues,6:#0.000}|{LatitudeValues,6:#0.000}|{LongitudeValues,6:#0.000}|{MagnitudeValues,6:#0.000}|{IrisValues,7}";
}

【讨论】:

  • @saraansh 如果你能看到这个,我建议取消删除你的答案。当 格式的填充结合使用时,选项卡是一个很好的解决方案。如果您复制文本然后将其粘贴到 Excel 等位置,则使用制表符有助于更好地对齐。您在此答案中使用格式字符串,因此所有内容至少在所需宽度的制表位内,并为剩余宽度放置一个制表符作为分隔符。
  • @JoelCoehoorn 理解为什么这个工作是插值的关键是在 String.Format 之上的语法糖,它是有意义的,因为格式化是这样工作的。 msdn.microsoft.com/en-us/library/…
【解决方案2】:

对于您想要的,您需要将数据填充到最大大小,如下所示:

    public override string ToString()
    {
        return $"{DayValues.ToString().PadRight(2, ' ')}|{MonthValues.ToString().PadRight(10, ' ')}|{YearValues.ToString().PadRight(4, ' ')}|{TimeValues.ToString().PadRight(8, ' ')}|{TimestampValues.ToString().PadRight(10, ' ')}|{RegionValues.ToString().PadRight(40, ' ')}|{DepthValues.ToString().PadRight(6, ' ')}|{LatitudeValues.ToString().PadRight(6, ' ')}|{LongitudeValues.ToString().PadRight(6, ' ')}|{MagnitudeValues.ToString().PadRight(6, ' ')}|{IrisValues.ToString().PadRight(6, ' ')}";
    }

我已将所有数据左对齐,但您可以使用 PadLeft 而不是 PadRight 更改对齐方式。此外,您需要将列大小(填充长度)调整为每个值的最大预期大小。

【讨论】:

  • 谢谢伙计。非常感谢
  • 这绝对是一条漫长的路。
  • 而捷径是……?
  • 真的很好,不知道插值字符串会允许填充数据。
  • @Gusman 它与内插字符串无关.....您可以在 {} 中添加任何代码
猜你喜欢
  • 1970-01-01
  • 2014-10-12
  • 1970-01-01
  • 1970-01-01
  • 2018-01-01
  • 1970-01-01
  • 2020-11-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多