2009-06-05 22 views
4

可能重複:
Can I "multiply" a string (in C#)?乘以串

在Python我可以這樣做:

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

我怎樣才能在Python繁殖在C#中的字符串相似?我可以很容易地在for循環中做到這一點,但這會變得乏味和不具表現力。

最終,我寫出了控制檯的遞歸方式,每次調用都會增加一個縮進級別。

parent 
    child 
    child 
    child 
     grandchild 

而且這將是最容易做到"\t" * indent

+3

寫一個擴展方法,這樣你就可以做 「你好」 .times(5)。 (如果我知道C#,我會在答案中做到這一點)。 – 2009-06-05 20:23:27

+0

除非C#允許運算符重載;可以? – 2009-06-05 20:24:51

+0

@mmyers將行爲添加到默認類被認爲是有害的 – Eric 2009-06-05 20:24:59

回答

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); 
+2

爲了防止無限循環,我想使乘數成爲一個乘數。 – Eric 2009-06-05 20:27:02

0

在C#中沒有這樣的說法;你最好的選擇可能是你自己的MultiplyString()函數。

12

如果你只需要一個單一的字符,你可以這樣做:

new string('\t', i) 

更多信息,請參見this post

11

沒有什麼內置到BCL做到這一點的,但有點LINQ可以做到很輕鬆地任務:

var multiplied = string.Join("", Enumerable.Repeat("hello", 5).ToArray()); 
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(); 
} 
1
int indent = 5; 
string s = new string('\t', indent); 
1

的一種方式做到這一點是以下 - 但它不是很好。

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

UPDATE

AHHHH ...我... remeber爲字符...

new String('x', 3) 
0

只要它是唯一一個要重複的性格,有一個字符串的構造函數,你可以使用:

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

如何用linq集合...

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

10

這裏是我如何做到這一點?

string value = new string(' ',5).Replace(" ","Apple"); 
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循環。

-1

如果u需要串3倍只是做

string x = "hello"; 

string combined = x + x + x;