Does this what you want?
"This will be a test".Replace("i", "X").Replace("t", String.Empty)
Here is a simple implementation of the CHRTRAN function - it does not work if the string contains \0 and is quite messy. You could write a nicer one using loops, but I just wanted to try it using LINQ.
public static String ChrTran(String input, String source, String destination) { return source.Aggregate( input, (current, symbol) => current.Replace( symbol, destination.ElementAtOrDefault(source.IndexOf(symbol))), preResult => preResult.Replace("\0", String.Empty)); }
And the you can use it.
// Returns "ThXs wXll be a es" String output = ChrTran("This will be a test", "it", "X");
Just to have a clean solution - the same without LINQ and working for the \0 cases, too, and it is almost in place because of using a StringBuilder but won't modify the input, of course.
public static String ChrTran(String input, String source, String destination) { StringBuilder result = new StringBuilder(input); Int32 minLength = Math.Min(source.Length, destination.Length); for (Int32 i = 0; i < minLength; i++) { result.Replace(source[i], destination[i]); } for (Int32 i = minLength; i < searchPattern.Length; i++) { result.Replace(source[i].ToString(), String.Empty); } return result.ToString(); }
Null reference handling is missing.
Inspired by tvanfosson's solution, I gave LINQ a second shot.
public static String ChrTran(String input, String source, String destination) { return new String(input. Where(symbol => !source.Contains(symbol) || source.IndexOf(symbol) < destination.Length). Select(symbol => source.Contains(symbol) ? destination[source.IndexOf(symbol)] : symbol). ToArray()); }