2009-04-06 3 views
2

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

ответ

5

Нет никакого метода замены в BCL, который заменит только один экземпляр символа. Два основных метода замены заменят все события. Тем не менее, не сложно написать версию, которая заменяет один символ.

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

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

0

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

0

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

1
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

1) Был уже ответ, и я принял его. 2) Вы не использовали кнопку кода 1010, которая делает это нечитаемым. – 2010-01-13 13:23:39