【问题标题】:How can I create a string in C# programmatically?如何以编程方式在 C# 中创建字符串?
【发布时间】:2010-03-09 18:17:00
【问题描述】:

我有一个字符串,我想根据一个 int 变量在该字符串的开头添加一些空格。
我想做这样的事情:

int NumberOfTabs = 2;
string line = "my line";
string line = String.Format("{0}{1}", "    " * NumberOfTabs, line);

...现在行将有 8 个空格

最简单的方法是什么?

【问题讨论】:

  • 虽然不是您问的问题,但对于简单的情况,即new string(' ', NumberOfTabs) + line,与+ 的字符串连接比string.Format 更清晰、更简单并且(如果重要的话)更快。

标签: c#


【解决方案1】:

您可以像这样使用String(char, Int32) 构造函数:

string line = String.Format("{0}{1}", new String(' ', NumberofTabs * 4), line);

或者更高效一点:

string line = String.Concat(new String(' ', NumberofTabs * 4), line);

或者,更简洁一点:)

string line = new String(' ', NumberofTabs * 4).Concat(line);

评论说得很好,如果你想真正拥有制表符,只需将' '更改为'\t',然后像这样取出* 4

string line = String.Concat(new String('\t', NumberofTabs), line);

【讨论】:

  • @Danny - 这就是原贴的内容,也许是代码缩进?在任何情况下,您都可以使用'\t' 而不是' ',如果想要真正的标签,请关闭* 4
  • @Danny - 你是对的,这绝对是一个有效的观点,以后有人可能会遇到这种情况。
  • 使用下面提到的Pad方法不是更简单更高效吗?
【解决方案2】:
int i=8;
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append(" ", i);

【讨论】:

  • 不是“最巧妙”的答案,但因为直截了当而获得 +1。
  • 这是最巧妙和正确的答案,他使用的是stringbuilder类,字符串是不可变的。 msdn.microsoft.com/en-us/library/system.text.stringbuilder.aspx
  • @Joe - 是的,字符串是不可变的,那又如何?
  • 以上所有的例子都使用了字符串变量,每次concat都会创建一个新的字符串。根据微软的说法,处理这个问题的最好方法是使用 stringbuilder 类
【解决方案3】:
new string(' ', NumberOfTabs )

【讨论】:

  • 继续OP的问题,好像应该是NumberOfTabs * 4
【解决方案4】:
str = str.PadLeft(str.Length+tabs*4);

【讨论】:

    【解决方案5】:

    在 C# 中,字符串是不可变的。你真的应该使用 stringbuilder 类。

    链接中列出了代码示例:

    http://msdn.microsoft.com/en-us/library/system.text.stringbuilder.aspx

    【讨论】:

    • 是的,每次你连接一个字符串时,你都会创建一个新的不需要的字符串。使用 stringbuilder 可以防止这种情况发生,并且是增加字符串长度的推荐方法,这是操作尝试执行的。
    • 对于少量的连接,StringBuilder 的开销比它节省的要多。
    • 如果您只是查看连接字符串,是的。但如果你看看车库收藏,也许不是。垃圾收集非常昂贵。更多额外的字符串,意味着更多的垃圾回收。
    【解决方案6】:

    你可以这样使用:

    String.Empty.PadRight(NumberOfTabs)
    

    【讨论】:

      【解决方案7】:

      您可以像这样在文本的开头添加标签:

      line.PadLeft(NumberOfTabs, '\t');
      

      \t 是“制表符”的转义字符 (Inserting a tab character into text using C#)

      【讨论】:

        【解决方案8】:
        int NumberOfTabs = 2;
        string line = "my line";
        string results = line.PadLeft(line.Length + NumberOfTabs, ' ');
        

        【讨论】:

          【解决方案9】:

          无论如何都不是最佳答案,但这里有一个有趣的 LINQ 单线:

          var result = new string(Enumerable.Repeat(' ', count).Concat("my line").ToArray());
          

          【讨论】:

            【解决方案10】:

            您可以创建一个包含自定义空格数的新字符串。不幸的是,没有像 Python (" " * 2) 那样的字符串乘法。但是你可以将空格数乘以 4 得到“制表符”:

            int numberOfTabs = 2;
            string line = "my line";
            string whitespaces = new string(' ', numberOfTabs * 4);
            string s = whitespaces + line;
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-08-29
              • 2011-02-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多