我试图在基于项深度的字符串之前插入一定数量的缩进,我想知道是否有一种方法可以返回一个重复X次的字符串。例子:
string indent = "---";
Console.WriteLine(indent.Repeat(0)); //would print nothing.
Console.WriteLine(indent.Repeat(1)); //would print "---".
Console.WriteLine(indent.Repeat(2)); //would print "------".
Console.WriteLine(indent.Repeat(3)); //would print "---------".
对于许多场景,这可能是最简洁的解决方案:
public static class StringExtensions
{
public static string Repeat(this string s, int n)
=> new StringBuilder(s.Length * n).Insert(0, s, n).ToString();
}
用法是:
text = "Hello World! ".Repeat(5);
这建立在其他答案的基础上(特别是@c0rd)。除了简单之外,它还具有以下特性,不是所有讨论的其他技术都具有这些特性:
重复任意长度的字符串,而不仅仅是字符(根据OP的要求)。
通过存储预分配有效使用StringBuilder。
我喜欢你给出的答案。我过去也用过同样的方法:
"".PadLeft(3*Indent,'-')
这将实现创建缩进,但技术上的问题是重复一个字符串。如果字符串缩进是像>-<这样的东西,那么这个和接受的答案一样将不起作用。在这种情况下,c0rd使用StringBuilder的解决方案看起来不错,尽管StringBuilder的开销实际上可能不是最高性能的。一种选择是构建一个字符串数组,用缩进字符串填充它,然后连接它。一点点:
int Indent = 2;
string[] sarray = new string[6]; //assuming max of 6 levels of indent, 0 based
for (int iter = 0; iter < 6; iter++)
{
//using c0rd's stringbuilder concept, insert ABC as the indent characters to demonstrate any string can be used
sarray[iter] = new StringBuilder().Insert(0, "ABC", iter).ToString();
}
Console.WriteLine(sarray[Indent] +"blah"); //now pretend to output some indented line
我们都喜欢聪明的解决方案,但有时简单是最好的。
对于许多场景,这可能是最简洁的解决方案:
public static class StringExtensions
{
public static string Repeat(this string s, int n)
=> new StringBuilder(s.Length * n).Insert(0, s, n).ToString();
}
用法是:
text = "Hello World! ".Repeat(5);
这建立在其他答案的基础上(特别是@c0rd)。除了简单之外,它还具有以下特性,不是所有讨论的其他技术都具有这些特性:
重复任意长度的字符串,而不仅仅是字符(根据OP的要求)。
通过存储预分配有效使用StringBuilder。