2009-10-10 2 views
4

Я конвертирую код Java в C#. Класс StringBuilder в Java, похоже, имеет гораздо больше методов, чем C#. Меня интересует (скажем) функциональность Javaразличия между StringBuilder в Java и C#

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

который, кажется, отсутствует в C#.

Я полагаю, что первые два могут быть смоделированы

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

но бы третий работать на копии содержимого СО, а не фактическое содержание?

Есть ли общий способ добавления этой функции ко всем отсутствующим методам?

ответ

6

Вы можете использовать коллекцию член Chars для .charAt. Аналогично, вы можете использовать .Remove (i, 1), чтобы удалить один символ в позиции i.

+0

@Joe. Где Шарс - не могли бы вы привести пример. (Я просмотрел http://msdn.microsoft.com/en-us/library/2839d5h5%28VS.71%29.aspx и ничего не нашел) –

+0

http://msdn.microsoft.com/en-us /library/system.text.stringbuilder_members%28VS.71%29.aspx Это свойство. В C# это делается с помощью индексатора (например, mySb [idx]) – Joe

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 и поэтому, естественно, сначала ищу идентичный метод. Спасибо за указание индексатора. –

0

StringBuilder имеет индексатор, это означает, что вы можете просто получить доступ с помощью одного символа С.Б. [I]

Смежные вопросы