.NET String.Replace

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


person Community    schedule 06.04.2009    source источник


Ответы (5)


Нет, в BCL нет метода 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();
}
person JaredPar    schedule 06.04.2009

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

person Joel Coehoorn    schedule 06.04.2009

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

person Adam Robinson    schedule 06.04.2009

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

person Brian Ensink    schedule 06.04.2009

person    schedule
comment
1) Ответ уже был, и я его принял. 2) Вы не использовали кодовую кнопку 1010, что делает это нечитаемым. - person ; 13.01.2010