简体   繁体   中英

.NET String.Replace

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?

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();
}

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

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

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.

您可以编写一个扩展方法来替换第一个匹配项。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM