6

重複の可能性:
(C# で) 文字列を「乗算」できますか?

Pythonでは、これを行うことができます:

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

Pythonと同様にC#で文字列を乗算するにはどうすればよいですか? for ループで簡単に実行できますが、それは面倒で表現力がありません。

最終的に、呼び出しごとにインデントされたレベルをインクリメントして、再帰的にコンソールに書き出しています。

parent
    child
    child
    child
        grandchild

そして、それを行うのが最も簡単でしょう"\t" * indent

4

12 に答える 12

19

この投稿には拡張メソッドがあります。

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);
于 2009-06-05T20:24:47.987 に答える
14

単一の文字が必要な場合は、次のことができます。

new string('\t', i)

詳細については、この投稿を参照してください。

于 2009-06-05T20:24:53.917 に答える
12

これが私がそれを行う方法です...

string value = new string(' ',5).Replace(" ","Apple");
于 2009-06-05T20:32:42.497 に答える
11

これを行うために BCL に組み込まれているものは何もありませんが、少しの LINQ を使用すると、タスクを簡単に実行できます。

var multiplied = string.Join("", Enumerable.Repeat("hello", 5).ToArray());
于 2009-06-05T20:25:06.007 に答える
1
int indent = 5;
string s = new string('\t', indent);
于 2009-06-05T20:27:42.193 に答える
1

これを行う 1 つの方法は次のとおりです。ただし、これはあまり適切ではありません。

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

アップデート

ああ...覚えてる...文字の...

 new String('x', 3)
于 2009-06-05T20:28:24.377 に答える
1

linq 集計ではどうですか...

var combined = Enumerable.Repeat("hello", 5).Aggregate("", (agg, current) => agg + current);
于 2009-06-05T20:29:19.460 に答える
0

C# にはそのようなステートメントはありません。あなたの最善の策は、おそらく独自の MultiplyString() 関数です。

于 2009-06-05T20:22:28.570 に答える
0

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();
}
于 2009-06-05T20:27:17.373 に答える
0

繰り返したい文字が 1 つだけである限り、使用できる String コンストラクターがあります。

string indentation = new String('\t', indent);
于 2009-06-05T20:29:00.397 に答える
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 ループでタブをダンプするのが賢明です。

于 2009-06-05T20:40:03.557 に答える
-1

文字列が3回必要な場合は、

string x = "hello";

string combined = x + x + x;
于 2009-06-05T20:42:45.720 に答える