如何在C#中以编程方式创建字符串?

6

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

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

...现在行应该有8个空格

最简单的方法是什么?


1
虽然这不是你问的问题,但对于简单情况,使用 + 进行字符串连接比 string.Format 更清晰、更简单(如果有必要)和更快,例如 new string(' ', NumberOfTabs) + line - Daniel Earwicker
10个回答

19
您可以像这样使用 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 - Nick Craver
@Danny - 你是对的,这绝对是一个有效的观点,以后可能会有人遇到类似情况并尝试解决。 - Nick Craver
1
使用下面提到的Pad方法会更容易和更有效,不是吗? - CodeMonkey1313

8
int i=8;
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append(" ", i);

1
不是最聪明的答案,但因为简单明了而得到了+1。 - Beska
这是最流畅和正确的答案,他正在使用StringBuilder类,字符串是不可变的。http://msdn.microsoft.com/zh-cn/library/system.text.stringbuilder.aspx - Joe Pitz
@Joe - 是的,字符串是不可变的,有什么问题吗? - Daniel Earwicker
以上所有示例都使用字符串变量,每次连接字符串时都会创建一个新的字符串。根据微软的说法,处理这种情况的最佳方法是使用StringBuilder类。 - Joe Pitz

6
new string(' ', NumberOfTabs )

1
根据楼主的问题,似乎应该是 NumberOfTabs * 4 - Adam Robinson

4
str = str.PadLeft(str.Length+tabs*4);

3

是的,每次连接字符串时都会创建一个新的不必要的字符串。使用StringBuilder可以避免这种情况,并且是增加字符串长度的推荐方式,这正是OP试图执行的操作。 - Joe Pitz
对于少量的字符串连接,StringBuilder 的开销比节省更多。 - Mike Polen
如果你只是想要连接字符串,那么可以。但是如果你考虑到垃圾回收,也许不行。垃圾回收非常昂贵。更多的额外字符串意味着更多的垃圾回收。 - Joe Pitz

2
你可以使用类似以下的东西:
String.Empty.PadRight(NumberOfTabs)

2

您可以像这样在文本开头添加选项卡:

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

\t是“制表符”的转义字符,用于表示一个“Tab”字符。 (在C#中插入一个制表符)


2
int NumberOfTabs = 2;
string line = "my line";
string results = line.PadLeft(line.Length + NumberOfTabs, ' ');

2

虽然不是最佳答案,但这里有一个有趣的LINQ一行代码:

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

0

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接