различия между StringBuilder в Java и C # - PullRequest
4 голосов
/ 10 октября 2009

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

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

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

Полагаю, первые два можно смоделировать с помощью

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

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

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

Ответы [ 4 ]

6 голосов
/ 10 октября 2009

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

2 голосов
/ 10 октября 2009

Для третьего вы можете использовать метод Удалить :

sb.Remove(i, 1);
1 голос
/ 10 октября 2009

Вы можете использовать методы расширения, такие как:

    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 голосов
/ 11 октября 2009

StringBuilder имеет индексатор, что означает, что вы можете просто получить доступ к отдельным символам, используя sb [i]

...