1

我有两个字符串

string str1 = "Hello World !"; // the position of W character is 6
string str2 = "peace";
//...
string result = "Hello peace !"; // str2 is written to str1 from position 6

有没有这样的功能:

string result = str1.Rewrite(str2, 6); // (string, position)

编辑了
这个“Hello World!” 只是一个例子,我不知道这个字符串中是否有“W”字符,我只知道:str1, str2, position ( int)

4

3 回答 3

3

没有,但您可以使用扩展方法创建一个。

public static class StringExtensions
{
    public static string Rewrite(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();
    }
}

然后,您在原始问题中发布的代码将起作用:

string result = str1.Rewrite(str2, 6); // (string, position)
于 2012-10-18T12:40:14.153 回答
1

从代码可理解性的角度来看,@danludwigs 的答案更好,但是这个版本要快一点。您正在处理字符串格式的二进制数据(wtf bbq btw :))的解释确实意味着速度可能至关重要。虽然使用字节数组或其他东西可能比使用字符串更好:)

public static string RewriteChar(this string input, string replacement, int index)
{
  // Get the array implementation
  var chars = input.ToCharArray();
  // Copy the replacement into the new array at given index
  // TODO take care of the case of to long string?
  replacement.ToCharArray().CopyTo(chars, index);
  // Wrap the array in a string represenation
  return new string(chars);
}
于 2012-10-18T14:11:27.763 回答
0

有很多方法可以做到这一点......

因为我是一个懒惰的屁股,我会去:

result = str1.Substring(0, 6) + str2 + str1.Substring(12, 2);

或者

result = str1.Replace("World", str2);

我的建议是,在 Visual Studio 中,右键单击“字符串”并选择“转到定义”。您将看到字符串“class”可用的所有方法。

于 2012-10-18T12:38:19.217 回答