在C#中乘以字符串

时间:2009-06-05 20:20:47

标签: c# string indentation

  

可能重复:
  Can I "multiply" a string (in C#)?

在Python中,我可以这样做:

>>> i = 3
>>> 'hello' * i
'hellohellohello'

如何在C#中将字符串与Python中的字符串相乘?我可以轻松地在for循环中执行它,但这会变得乏味且无表情。

最终我正在递归地写出控制台,每次调用都会递增缩进级别。

parent
    child
    child
    child
        grandchild

最简单的做"\t" * indent

12 个答案:

答案 0 :(得分:19)

this post中有一种扩展方法。

public static string Multiply(this string source, int multiplier)
{
   StringBuilder sb = new StringBuilder(multiplier * source.Length);
   for (int i = 0; i < multiplier; i++)
   {
       sb.Append(source);
   }

   return sb.ToString();
}

string s = "</li></ul>".Multiply(10);

答案 1 :(得分:12)

如果你只需要一个角色,你可以这样做:

new string('\t', i)

有关详细信息,请参阅this post

答案 2 :(得分:11)

BCL没有内置的功能,但是LINQ可以轻松完成任务:

var multiplied = string.Join("", Enumerable.Repeat("hello", 5).ToArray());

答案 3 :(得分:11)

我是这样做的......

string value = new string(' ',5).Replace(" ","Apple");

答案 4 :(得分:1)

int indent = 5;
string s = new string('\t', indent);

答案 5 :(得分:1)

这样做的一种方法是 - 但它并不是那么好。

 String.Join(String.Empty, Enumerable.Repeat("hello", 3).ToArray())

<强>更新

啊啊......我记得......为了追逐......

 new String('x', 3)

答案 6 :(得分:1)

如何使用linq聚合...

var combined = Enumerable.Repeat("hello", 5).Aggregate("", (agg, current) => agg + current);

答案 7 :(得分:0)

C#中没有这样的陈述;你最好的选择可能是你自己的MultiplyString()函数。

答案 8 :(得分:0)

Per mmyers:

public static string times(this string str, int count)
{
  StringBuilder sb = new StringBuilder();
  for(int i=0; i<count; i++) 
  {
    sb.Append(str);
  }
  return sb.ToString();
}

答案 9 :(得分:0)

只要你想重复一个字符,就可以使用一个String构造函数:

string indentation = new String('\t', indent);

答案 10 :(得分:0)

我认为您不能使用运算符重载扩展System.String,但您可以创建一个字符串包装类来执行此操作。

public class StringWrapper
{
    public string Value { get; set; }

    public StringWrapper()
    {
        this.Value = string.Empty;
    }

    public StringWrapper(string value)
    {
        this.Value = value;
    }

    public static StringWrapper operator *(StringWrapper wrapper,
                                           int timesToRepeat)
    {
        StringBuilder builder = new StringBuilder();

        for (int i = 0; i < timesToRepeat; i++)
        {
            builder.Append(wrapper.Value);
        }

        return new StringWrapper(builder.ToString());
    }
}

然后称之为......

var helloTimesThree = new StringWrapper("hello") * 3;

从...中获取价值

helloTimesThree.Value;

当然,理所当然的事情就是让你的函数跟踪并传入当前深度,并根据它在for循环中转出标签。

答案 11 :(得分:-1)

如果你需要3次字符串

string x = "hello";

string combined = x + x + x;