.NET String.Replace - PullRequest
       11

.NET String.Replace

2 голосов
/ 06 апреля 2009

Я так раздражен. Обычно я люблю замену, действуя так же, как в C #, но есть ли замена в стиле C ++, когда она заменяет только одну букву за раз или указанную мной сумму X?

Ответы [ 5 ]

5 голосов
/ 06 апреля 2009

Нет, в 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 голосов
/ 06 апреля 2009

Просто используйте IndexOf и SubString, если вы хотите заменить только одно вхождение.

1 голос
/ 13 января 2010
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);      
}
0 голосов
/ 06 апреля 2009

Вы можете написать метод расширения, чтобы заменить только первое вхождение.

0 голосов
/ 06 апреля 2009

Если вы заинтересованы в замене символа на символ (особенно, если вы хотите выполнить только определенное количество операций), вам лучше всего преобразовать строку в char[] и выполнить манипулировать там индексом, затем преобразовать его обратно в строку. Вы сэкономите себе немного ненужного создания строк, но это будет работать, только если ваши замены имеют ту же длину, что и заменяемые вами.

...