Перезапись строки другой строкой начиная с определенной позиции в C#

1351268299_old-edit-find-replace

Представьте что имея строку «Hello World!» нам надо перезаписать ее начина с 6-го символа строкой «guys!!» чтобы получить строку «Hello guys!!». Оказывается в .NET нет стандартного метода который позволил бы легко это сделать.

Я написал следующий класс, который содержит три метода расширения для решения этой задачи разными способами:

public static class StringExtensions
    {
        public static string RewriteUsingStrinBuilder(this string input, string replacement, int index)
        {
            var output = new System.Text.StringBuilder();
            output.Append(input.Substring(0, index));
            output.Append(replacement);
            output.Append(input.Substring(index + replacement.Length));
            return output.ToString();
        }

        public static string RewriteUsingRemoveInsert(this string input, string replacement, int startIndex)
        {
            return input.Remove(startIndex, replacement.Length).Insert(startIndex, replacement);
        }

        public static string RewriteUsingCharArray(this string input, string replacement, int index)
        {
            var chars = input.ToCharArray();
            replacement.ToCharArray().CopyTo(chars, index);
            return new string(chars);
        }
    }

Какой именно способ использовать можно решить либо по песональным предпочтениям, либо воспользовавшись результатами проведенного мной бенчмаркинга:

RewriteUsingRemoveInsert: 1952,6217
RewriteUsingStrinBuilder: 2348,9307
RewriteUsingCharArray: 1887,1408

Из приведенных результатов делаем вывод, что самым быстрым способом является применение массива символов, поэтому для решения поставленной задачи я использую именно его:

string str1 = "Hello World!";
string str2 = "guys!";

string res = str1.RewriteUsingCharArray(str2, 6);
Console.WriteLine(res);

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>