【问题标题】:.NET String.Replace.NET 字符串。替换
【发布时间】:2009-04-06 12:54:17
【问题描述】:

我很生气。通常我喜欢像在 C# 中那样替换操作,但是是否有 C++ 样式的替换,它一次只替换一个字母或我指定的 X 数量?

【问题讨论】:

    标签: c# .net string replace


    【解决方案1】:

    不,BCL 中没有 Replace 方法,它只会替换字符的单个实例。两个主要的 Replace 方法将替换所有出现的事件。但是,编写一个替换单个字符的版本并不难。

    public static string ReplaceSingle(this string source, char toReplace, char newChar) {
      var index = source.IndexOf(toReplace);
      if ( index < 0 ) {
        return source;
      }
      var builder = new StringBuilder();
      for( var i = 0; i < source.Length; i++ ) {
        if ( i == index ) {
          builder.Append(newChar);
        } else {
          builder.Append(source[i]);
        }
      }
      return builder.ToString();
    }
    

    【讨论】:

      【解决方案2】:

      如果您只想替换一次,只需使用 IndexOf 和 SubString。

      【讨论】:

        【解决方案3】:
        public string ReplaceString(string source,int index,string newString) 
        {       
            char[] sourceArray=source.ToCharArray();    
            char[] newArray=newString.ToCharArray();    
            for(int i=index;i<index+newString.Length ;i++)  
                sourceArray[i]=newArray[i];
            return new string(sourceArray);      
        }
        

        【讨论】:

        • 1) 已经有答案,我接受了。 2)你没有使用 1010 代码按钮,这使得这个不可读。
        【解决方案4】:

        如果您有兴趣进行逐个字符的替换(特别是如果您只想执行特定数量的操作),您最好将字符串转换为 char[] 并执行您的通过索引进行操作,然后将其转换回字符串。您将为自己节省一些不必要的字符串创建,但这仅在您的替换与您要替换的长度相同时才有效。

        【讨论】:

          【解决方案5】:

          您可以编写一个扩展方法来替换第一次出现的情况。

          【讨论】: