Если под «лучшим» решением вы имеете в виду быстрее:
static String Replace(String input)
{
if (input.Length <= 1) return input;
// the input string can only get shorter
// so init the buffer so we won't have to reallocate later
char[] buffer = new char[input.Length];
int outIdx = 0;
for (int i = 0; i < input.Length; i++)
{
char c = input[i];
if (c == '\\')
{
if (i < input.Length - 1)
{
switch (input[i + 1])
{
case 'n':
buffer[outIdx++] = '\n';
i++;
continue;
case 'r':
buffer[outIdx++] = '\r';
i++;
continue;
case 't':
buffer[outIdx++] = '\t';
i++;
continue;
}
}
}
buffer[outIdx++] = c;
}
return new String(buffer, 0, outIdx);
}
Это значительно быстрее, чем при использовании Regex.Особенно, когда я проверил по этому входному сигналу:
var input = new String('\\', 0x1000);
Если под «лучше» вы имеете в виду легче читать и поддерживать, то решение Regex, вероятно, победит.Также могут быть ошибки в моем решении;Я не проверял это очень тщательно.