【问题标题】:What is the C# equivalent of Perl's repetition operator?perl的重复运算符的c#等同物是什么?
【发布时间】:2010-09-22 16:33:58
【问题描述】:

在 Perl 中

print "a" x 3;  # aaa

在 C# 中

Console.WriteLine( ??? )

【问题讨论】:

    标签: c# perl string


    【解决方案1】:

    这取决于您需要什么...例如new string('a',3)

    用于处理字符串;你可以循环......不是很有趣,但它会工作。

    在 3.5 中,您可以使用 Enumerable.Repeat("a",3),但这会为您提供字符串序列,而不是复合字符串。

    如果您要经常使用它,可以使用定制的 C# 3.0 扩展方法:

        static void Main()
        {
            string foo = "foo";
            string bar = foo.Repeat(3);
        }
        // stuff this bit away in some class library somewhere...
        static string Repeat(this string value, int count)
        {
            if (count < 0) throw new ArgumentOutOfRangeException("count");
            if (string.IsNullOrEmpty(value)) return value; // GIGO            
            if (count == 0) return "";
            StringBuilder sb = new StringBuilder(value.Length * count);
            for (int i = 0; i < count; i++)
            {
                sb.Append(value);
            }
            return sb.ToString();
        }
    

    【讨论】:

    • Marc 你不觉得 StringBuilder().Insert(0, value, count) 更好吗?
    【解决方案2】:

    如果您只需要重复一个字符(如您的示例中所示),那么这将起作用:

    Console.WriteLine(new string('a', 3))
    

    【讨论】:

    • 是的,但它满足问题中的要求。
    • 那么 Perl 的重复操作符只对字符有效?他使用由单个字符组成的字符串这一事实不应该提示您将答案限制为该特定示例。这个问题更笼统。
    • 查看我的其他回复,了解如何使用字符串执行此操作。
    【解决方案3】:

    在所有版本的 .NET 中重复一个字符串你总是可以这样做

    public static string Repeat(string value, int count)
    {
      return new StringBuilder().Insert(0, value, count).ToString();
    }
    

    【讨论】:

      【解决方案4】:

      如果您需要像 Tom 指出的那样使用字符串来执行此操作,那么扩展方法将很好地完成这项工作。

      static class StringHelpers
      {
          public static string Repeat(this string Template, int Count)
          {
              string Combined = Template;
              while (Count > 1) {
                  Combined += Template;
                  Count--;
              }
              return Combined;
          }
      }
      
      class Program
      {
          static void Main(string[] args)
          {
              string s = "abc";
              Console.WriteLine(s.Repeat(3));
              Console.ReadKey();
          }
      

      【讨论】:

      • 对于像这样的循环工作,建议使用 StringBuilder... 连接对 2-or-3 很好,但如果有人要求 "a".Repeat(100) 你有很多不必要的字符串要收集。
      • 确实如此。 StringBuilder 在某些方面变得更有效率。我听说它大约是 10。在给出的示例中,他有 3,所以我认为它会很小。如果你想覆盖更广泛的范围,那么放入一个“if”并使用 StringBuilder 超过 10 会更有效。
      猜你喜欢
      • 2011-03-23
      • 2017-05-10
      • 1970-01-01
      • 1970-01-01
      • 2011-08-25
      • 2021-04-14
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      相关资源
      最近更新 更多