2014-10-27 14 views
7

Chcę usunąć karty z łańcucha. Używam tego kodu, ale nie działa.C# Usuń zakładkę ze stringa, Identyfikatory zakładek

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

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

próbowałem tego, ale jeszcze jej nie działa

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

on pracował z String line = strWithTabs.Replace(" ", "");

Ale jest ich w inny sposób zidentyfikować kart?

Spojrzałem również na ten post Removal of Tab-whitespace? Ale usunięto wszystkie spacje ze sznurka, gdzie jak tylko chcę usunąć Tabs.

+3

Pierwszym przykładem będzie działać, chyba że nie ma zakładki w 'strWithTabs' ... – madd0

Odpowiedz

12

Zakładka i spacja nie są takie same, jeśli zakładka jest konwertowana na spacje, zastąpienie tylko "\ t" nie będzie działać. Poniższy kod znajdzie tabulator i zastąpi go pojedynczym odstępem, a także znajdzie wiele spacji i zastąpi go pojedynczym odstępem.

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

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

Ponieważ " " nie jest równy tab character. \t jest. Jest to escape sequence character.

Na przykład;

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

line będzie here is a stringwith a tab

Nie można powiedzieć zdanie jak \t jest równa 6 miejsc na przykład.

+1

@Downvoter starannością komentarz na przynajmniej mogę zobaczyć, gdzie mogę się mylić? –

+0

To zadziałało, dzięki Mister @ SonerGönül –

1

Wykorzystanie wyrażeń regularnych, aby zmniejszyć wielokrotne spacje do jednego:

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