【问题标题】:Space between character字符之间的空间
【发布时间】:2015-07-25 07:26:08
【问题描述】:

我正在使用以下代码在 C# 打印中打印 DateTimePicker 选定日期。

string theDate1 = dateTimePicker1.Value.ToString("ddMMyyyy");
g.DrawString("" + theDate1 + "  .", new Font("Arial", 19, FontStyle.Regular), Brushes.Brown, new PointF(510, 68));

结果是这样的:15072015

我需要在这些日期之间保留空格。如果我编写此代码以仅打印每种类型的日期、月份或年份,则需要在字符之间保留空格。 例如:我需要这样的结果:1 5 0 7 2 0 1 5 我该怎么做呢

【问题讨论】:

  • 你认为会有[打印]答案还是归结为字符串操作?

标签: c# .net string linq


【解决方案1】:

将此添加到页面顶部的 using 指令中:

using System.Linq;

然后像这样简单地使用Aggregate

theDate1 = theDate1.Aggregate(string.Empty, (d, i) => d + i + ' ');//1 5 0 7 2 0 1 5

【讨论】:

  • 我正要使用.SelectMany 发布一个解决方案,但这更好。干得好。
【解决方案2】:

另一种方法是这样的:

string theDate1 = dateTimePicker1.Value.ToString("ddMMyyyy");
theDate1 = string.Join(" ", theDate1.AsEnumerable());

【讨论】:

    【解决方案3】:

    试试这个

    StringBuilder SB= new     StringBuilder();
    
    foreach (char ch in theDate1)
    {
        SB.Append(ch);
        SB.Append(" ");
    }
    var result =SB.ToString().TrimEnd();
    

    【讨论】:

    • 不客气。请注意,我使用 StringBuilder 进行连接而不是字符串。如果您不熟悉它,我建议您详细了解它们之间的区别。
    • @ehh - “注意我使用 StringBuilder 进行连接而不是字符串”是什么意思?
    • 我可以定义一个字符串变量而不是 StringBuilder 并在每次迭代时对字符串进行连接。但是在每次连接时都会创建一个新的字符串实例,而不是使用 StringBuilder
    • 其实你的解决方案是不正确的,因为它会在字符串末尾追加一个额外的空格(" "),所以你会得到1 5 0 7 2 0 1 5 而不是1 5 0 7 2 0 1 5,这就是OP期待得到。您应该在调用ToString() 之后再调用Trim()TrimEnd()
    • @ehh - 在这种情况下,OP 显示的字符串可以有效地放在一行中,因此它几乎不需要 StringBuilder 的效率。
    【解决方案4】:

    最简单的方法:

    for (int i = 0; i < theDate1.Length; i++) {
        Console.Write(theDate1[i].ToString() + " "); 
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-21
      • 2012-02-07
      • 2012-06-19
      相关资源
      最近更新 更多