С# Удалить вкладку из строки, Tabs Identificaton

Я хочу удалить вкладки из строки. Я использую этот код, но он не работает.

 string strWithTabs = "here is a string      with a tab";

 // tab-character
 char tab = '\u0009';
 String line = strWithTabs.Replace(tab.ToString(), "");

Я пробовал это, но все еще не работал

String line = strWithTabs.Replace("\t", "");

Он работал с String line = strWithTabs.Replace(" ", "");

Но есть ли другой способ определения вкладок?

Я также посмотрел этот пост Удаление пропущенных пробелов? Но он удалил все пробелы из строки, где, поскольку я просто хочу удалить вкладки.

Ответ 1

Вкладка и пробел не совпадают, если табуляция преобразуется в пробелы, замена только "\ t" не будет работать. Ниже код найдет вкладку и заменит один пробел, а также найдет несколько пробелов и заменит один пробел.

string strWithTabs = "here is a string          with a tab and with      spaces";

string line = strWithTabs.Replace("\t", " ");
while(line.IndexOf("  ") >= 0)
{
    line = line.Replace("  ", " ");
}

Ответ 2

Потому что " " не соответствует символу табуляции. \t есть. Это символ escape-последовательности.

Например:

string strWithTabs = "here is a string\twith a tab";
char tab = '\u0009';
String line = strWithTabs.Replace(tab.ToString(), "");

line будет here is a stringwith a tab

Вы не можете сказать, что предложение типа \t равно 6 пробелам, например.

Ответ 3

Используйте регулярное выражение для сокращения нескольких пробелов до одного:

var strWithTabs = "here is a string      with a tab    and      spaces";
const string reduceMultiSpace= @"[ ]{2,}";
var line= Regex.Replace(strWithTabs.Replace("\t"," "), reduceMultiSpace, " ");