2017-08-12 9 views
2

Ich arbeite an einer Windows-Anwendung, wo ich Wert einer Zeichenfolge namens 'StrData' von einer Funktion, die '\' drin hat. Ich möchte diese Zeichenfolge durch "\" teilen, aber ich weiß nicht, warum die Funktion "Teilen" nicht funktioniert.Warum Split funktioniert nicht in meinem Code

string strData= "0101-0000046C\0\0\0"; //This Value comes from a function 
string[] strTemp = strData.Split('\\'); 
return strTemp[0]; 

Der Wert von 'strTemp [0]' ist immer noch "0101-0000046C \ 0 \ 0 \ 0". Bitte helfen Sie mir

+2

Sie interpretiert * sicher * gibt es \ Zeichen in 'strData'? Bist du dir wirklich sicher*? – itsme86

+0

Wenn Sie nur interessiert sind, die Zeichenfolge vor dem \ 0 zu erhalten, dann verwenden Sie _strData = strData.Substring (0, strData.IndexOf ('\ 0')) _ – Steve

Antwort

4

Ihre Daten werden als nicht-maskierten String interpretiert : Das bedeutet, dass alle Ihre \0 in Ihrer Code-Datei auf die Ascii-Char mit dem Wert von 0 (value-zero-char) aufgelöst werden.

In Ihrem Fall müssen Sie schließlich den Wert Null-Zeichen wie folgt ersetzen: strData = strData.Replace("\0", "0\\"); dann funktioniert es.

Erläuterung: Dies ersetzt den Wert Null-Zeichen durch eine Zahl Null-Zeichen und einen umgekehrten Schrägstrich.

Wie gesagt, Sie entweder die Quellzeichenfolge zu xxx\\0 entkommen oder eine @ -sign vor der Saiten- Erklärung wie folgt schreiben: var x = @"xxx"; (nur theoretisch, zweite Methode funktioniert hier nicht, weil Sie sagen, Sie den Wert erhalten von einer Funktion). Dies löst in beiden Fällen normalerweise Ihr Problem.

+0

Vielen Dank für das Problem zu lösen und das Problem zu verstehen. –

+0

@enamur kein Problem :) Wenn es Ihnen geholfen hat, vergessen Sie bitte nicht, die Antwort als gelöst zu markieren, um Menschen in der Zukunft (die das gleiche Problem haben) zu helfen, die Lösung besser zu identifizieren. – cramopy

0

Code ist falsch, Backslash Null \ 0 "Null Zeichen" Wenn Sie echte Backslash möchten, verwenden Sie doppelte \\

string strData= "0101-0000046C\\0\\0\\0"; //This Value comes from a function 
string[] strTemp = strData.Split('\\'); 
return strTemp[0]; 
+0

ja Sie haben Recht, aber zum Zeitpunkt des Vergleichs mit anderen String-Variablen Dieser Backslash & Nullen verursachen ein Problem –

0

Verwendung @ die Zeichenfolge buchstäblich

string strData= @"0101-0000046C\0\0\0"; 

\0 ist nur ein Zeichen so addieren @ vor dem String zu interpretieren, so dass seine buchstäblich

Verwandte Themen