replacestring中给定索引的字符?

string没有ReplaceAt() ,我正在翻倒一点如何做一个体面的function,做我所需要的。 我想CPU的成本很高,但string的大小很小,所以一切都好

使用StringBuilder

 StringBuilder sb = new StringBuilder(theString); sb[index] = newChar; theString = sb.ToString(); 

最简单的方法是这样的:

 public static string ReplaceAt(this string input, int index, char newChar) { if (input == null) { throw new ArgumentNullException("input"); } char[] chars = input.ToCharArray(); chars[index] = newChar; return new string(chars); } 

现在这是一个扩展方法,所以你可以使用:

 var foo = "hello".ReplaceAt(2, 'x'); Console.WriteLine(foo); // hexlo 

如果只想要一个数据副本而不是两个数据副本,我想这样做会很好,但是我不确定有什么办法。 这可能会做到这一点:

 public static string ReplaceAt(this string input, int index, char newChar) { if (input == null) { throw new ArgumentNullException("input"); } StringBuilder builder = new StringBuilder(input); builder[index] = newChar; return builder.ToString(); } 

…我怀疑它完全取决于你使用的是哪个版本的框架。

 string s = "ihj"; char[] array = s.ToCharArray(); array[1] = 'p'; s = new string(array); 

我突然需要做这个任务,发现这个话题。 所以,这是我的linq风格的变体:

 public static class Extensions { public static string ReplaceAt(this string value, int index, char newchar) { if (value.Length <= index) return value; else return string.Concat(value.Select((c, i) => i == index ? newchar : c)); } } 

然后,例如:

 string instr = "Replace$dollar"; string outstr = instr.ReplaceAt(7, ' '); 

最后我需要使用.Net Framework 2,所以我使用了一个StringBuilder类变体。

string是不可变的对象,所以你不能replacestring中给定的字符。 你可以做的是你可以创build一个新的stringreplace给定的字符。

但是如果你要创build一个新的string,为什么不使用一个StringBuilder:

 string s = "abc"; StringBuilder sb = new StringBuilder(s); sb[1] = 'x'; string newS = sb.ToString(); //newS = "axc"; 

如果您的项目(.csproj)允许不安全的代码,这可能是更快的解决scheme:

 namespace System { public static class StringExt { public static unsafe void ReplaceAt(this string source, int index, char value) { if (source == null) throw new ArgumentNullException("source"); if (index < 0 || index >= source.Length) throw new IndexOutOfRangeException("invalid index value"); fixed (char* ptr = source) { ptr[index] = value; } } } } 

你可以使用它作为String对象的扩展方法。

 public string ReplaceChar(string sourceString, char newChar, int charIndex) { try { // if the sourceString exists if (!String.IsNullOrEmpty(sourceString)) { // verify the lenght is in range if (charIndex < sourceString.Length) { // Get the oldChar char oldChar = sourceString[charIndex]; // Replace out the char ***WARNING - THIS CODE IS WRONG - it replaces ALL occurrences of oldChar in string!!!*** sourceString.Replace(oldChar, newChar); } } } catch (Exception error) { // for debugging only string err = error.ToString(); } // return value return sourceString; }