2009-10-10 53 views
4

我將Java代碼轉換爲C#。 Java中的StringBuilder類似乎有比C#更多的方法。我感興趣的(比如說)的Java功能Java中的StringBuilder和C#的區別

sb.indexOf(s); 
sb.charAt(i); 
sb.deleteCharAt(i); 

這似乎在C#中丟失。

我想前兩個可以通過

sb.ToString().IndexOf(s); 
sb.ToString().CharAt(i); 

進行建模,但會在的sb的內容,而不是實際的內容的副本第三操作?

是否有一種常見的方式將此功能添加到所有缺少的方法?

回答

6

您可以使用字符數成員集合.charAt。同樣,您可以使用.Remove(i,1)刪除位置i處的單個字符。

+0

@Joe單個字符。 Chars在哪裏 - 你能舉一個例子嗎? (我查看了http://msdn.microsoft.com/en-us/library/2839d5h5%28VS.71%29.aspx,但沒有找到任何內容) – 2009-10-10 16:07:35

+0

http://msdn.microsoft.com/en-us /library/system.text.stringbuilder_members%28VS.71%29.aspx 這是一個屬性。在C#中,它是通過索引器完成的(例如mySb [idx]) – Joe 2009-10-10 16:10:02

2

對於第三個,你可以使用Remove方法:

sb.Remove(i, 1); 
1

你可以使用擴展方法如下所示:

static class Extensions 
    { 
     public static int IndexOf(this StringBuilder sb, string value) 
     { 
      return sb.ToString().IndexOf(value); 
     } 

//if you must use CharAt instead of indexer 
     public static int CharAt(this StringBuilder sb, int index) 
     { 
      return sb[index]; 
     } 
    } 
+0

@Yuriy我來自Java,所以自然先找到一個相同的方法。感謝您指出索引器。 – 2009-10-10 16:24:44

0

的StringBuilder有一個索引,這意味着你可以簡單地訪問使用SB [I]