Я так раздражен. Обычно мне нравится заменять, действуя так же, как в С#, но есть ли замена в стиле С++, где она заменяет только одну букву за раз или количество X, которое я указываю?
.NET String.Replace
Ответы (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();
}
Просто используйте IndexOf и SubString, если вы хотите заменить только одно вхождение.
Если вы заинтересованы в замене символа на символ (особенно если вы хотите выполнить только определенное количество операций), вы, вероятно, преуспеете, преобразовав свою строку в char[]
и выполняя свои манипуляции там по индексу, затем преобразовать его обратно в строку. Вы избавите себя от ненужного создания строк, но это будет работать только в том случае, если ваши замены имеют ту же длину, что и то, что вы заменяете.
Вы можете написать метод расширения, чтобы заменить только первое вхождение.