С# Удалить вкладку из строки, 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, " ");