.NET String.Replace

2019-07-21 02:37发布

问题:

I am so annoyed. Typically I like replace acting as it does in C# but is there a C++ styled replace where it only replaces one letter at a time or the X amount I specify?

回答1:

No there is not a Replace method in the BCL which will replace only a single instance of the character. The two main Replace methods will replace all occurances. However, it's not terribly difficult to write a version that does a single character replacement.

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:

Just use IndexOf and SubString if you only want to replace one occurance.



回答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);      
}


回答4:

If you're interested in doing a character-for-character replacement (especially if you only want to do a particular number of operations), you'd probably do well to convert your string to a char[] and do your manipulations there by index, then convert it back to a string. You'll save yourself some needless string creation, but this will only work if your replacements are the same length as what you're replacing.



回答5:

You could write an extension method to replace just the first occurrence.