Ich möchte eine Erweiterungsmethode für die .NET String-Klasse schreiben. Ich möchte, dass es eine spezielle Variante der Split-Methode ist - eine, die ein Escape-Zeichen verwendet, um zu verhindern, dass die Zeichenfolge geteilt wird, wenn ein Escape-Zeichen vor dem Trennzeichen verwendet wird.
Wie schreibe ich das am besten? Ich bin gespannt auf die beste Art, sich ihr nicht zu nähern Etwas mit einer Unterschrift wie ...
%Vor%UPDATE: Weil es in einem kam die Kommentare, die Flucht ...
In C #, wenn Sie Nicht-Sonderzeichen umgehen, erhalten Sie den Fehler - CS1009: Nicht erkannte Escape-Sequenz.
In IE JScript werden die Escape-Zeichen verworfen. Es sei denn, Sie versuchen \ u und dann erhalten Sie eine "Erwartete hexadezimale Ziffer" Fehler. Ich habe Firefox getestet und es hat das gleiche Verhalten.
Ich möchte, dass diese Methode ziemlich nachsichtig ist und dem JavaScript-Modell folgt. Wenn Sie auf einem Nicht-Trennzeichen entkommen, sollten Sie einfach das Escape-Zeichen "entfernen".
Das muss etwas aufgeräumt werden, aber das ist es im Wesentlichen ....
%Vor%Meine erste Beobachtung ist, dass das Trennzeichen ein Zeichen und keine Zeichenkette sein sollte, da es schwierig sein kann, eine Zeichenkette mit einem einzelnen Zeichen zu entschlüsseln - wie viel von der folgenden Zeichenkette deckt die Escape-Zeichentabelle ab? Abgesehen davon ist @James Currans Antwort ziemlich genau, wie ich damit umgehen würde - obwohl er, wie er sagt, etwas Aufräumen braucht. Initialisieren von j zum Beispiel 0 im Schleifeninitialisierer. Herausfinden, wie man mit Null-Eingaben umgehen kann, usw.
Sie möchten wahrscheinlich auch StringSplitOptions unterstützen und angeben, ob eine leere Zeichenfolge in der Auflistung zurückgegeben werden soll.
Hier ist die Lösung, wenn Sie das Escape-Zeichen entfernen möchten.
%Vor%Wahrscheinlich nicht der beste Weg, es zu tun, aber es ist eine andere Alternative. Grundsätzlich, überall die Sequenz von escape + seperator gefunden wird, ersetzen Sie es durch eine GUID (Sie können jeden anderen zufälligen Mist hier verwenden, spielt keine Rolle). Verwenden Sie dann die integrierte Split-Funktion. Ersetzen Sie dann die GUID in jedem Element des Arrays durch den Befehl escape + seperator.
Das muss etwas aufgeräumt werden, aber das ist es im Wesentlichen ....
%Vor%Meine erste Beobachtung ist, dass das Trennzeichen ein Zeichen und keine Zeichenkette sein sollte, da es schwierig sein kann, eine Zeichenkette mit einem einzelnen Zeichen zu entschlüsseln - wie viel von der folgenden Zeichenkette deckt die Escape-Zeichentabelle ab? Abgesehen davon ist @James Currans Antwort ziemlich genau, wie ich damit umgehen würde - obwohl er, wie er sagt, etwas Aufräumen braucht. Initialisieren von j zum Beispiel 0 im Schleifeninitialisierer. Herausfinden, wie man mit Null-Eingaben umgehen kann, usw.
Sie möchten wahrscheinlich auch StringSplitOptions unterstützen und angeben, ob eine leere Zeichenfolge in der Auflistung zurückgegeben werden soll.
Hier ist die Lösung, wenn Sie das Escape-Zeichen entfernen möchten.
%Vor%Sie können so etwas versuchen. Obwohl, würde ich vorschlagen, mit unsafe-Code für leistungskritische Aufgaben zu implementieren.
%Vor%Ich möchte eine Erweiterungsmethode für die .NET String-Klasse schreiben. Ich möchte, dass es eine spezielle Variante der Split-Methode ist - eine, die ein Escape-Zeichen verwendet, um zu verhindern, dass die Zeichenfolge geteilt wird, wenn ein Escape-Zeichen vor dem Trennzeichen verwendet wird.
Wie schreibe ich das am besten? Ich bin gespannt auf die beste Art, sich ihr nicht zu nähern Etwas mit einer Unterschrift wie ...
%Vor%UPDATE: Weil es in einem kam die Kommentare, die Flucht ...
In C #, wenn Sie Nicht-Sonderzeichen umgehen, erhalten Sie den Fehler - CS1009: Nicht erkannte Escape-Sequenz.
In IE JScript werden die Escape-Zeichen verworfen. Es sei denn, Sie versuchen \ u und dann erhalten Sie eine "Erwartete hexadezimale Ziffer" Fehler. Ich habe Firefox getestet und es hat das gleiche Verhalten.
Ich möchte, dass diese Methode ziemlich nachsichtig ist und dem JavaScript-Modell folgt. Wenn Sie auf einem Nicht-Trennzeichen entkommen, sollten Sie einfach das Escape-Zeichen "entfernen".
Wie wäre es mit:
%Vor%Das scheint zu funktionieren (mit ein paar schnellen Test-Strings), aber es entfernt nicht das Escape-Zeichen - das hängt von Ihrer genauen Situation ab, vermute ich.
Die Signatur ist falsch, Sie müssen ein Zeichenfolgenarray
zurückgebenWARNIG NIEMALS VERLÄNGERUNGEN VERWENDET, also verzeiht mir einige Fehler;)
%Vor%Wahrscheinlich nicht der beste Weg, es zu tun, aber es ist eine andere Alternative. Grundsätzlich, überall die Sequenz von escape + seperator gefunden wird, ersetzen Sie es durch eine GUID (Sie können jeden anderen zufälligen Mist hier verwenden, spielt keine Rolle). Verwenden Sie dann die integrierte Split-Funktion. Ersetzen Sie dann die GUID in jedem Element des Arrays durch den Befehl escape + seperator.
Persönlich würde ich betrügen und einen Blick auf string.Split mit Reflektor ... InternalSplitOmitEmptyEntries
sieht nützlich; -)
Ich hatte auch dieses Problem und habe keine Lösung gefunden. Also habe ich selbst eine solche Methode geschrieben:
%Vor%Er wird in Kombination mit Escape und Unescape verwendet, wodurch das Trennzeichen und das Escape-Zeichen getrennt und Escape-Zeichen wieder entfernt werden:
%Vor%Beispiele für escape / unescape
%Vor%Teilen:
%Vor%So verwenden Sie es, vor dem Join und Unescape nach dem Split.
Ich hatte auch dieses Problem und habe keine Lösung gefunden. Also habe ich selbst eine solche Methode geschrieben:
%Vor%Er wird in Kombination mit Escape und Unescape verwendet, wodurch das Trennzeichen und das Escape-Zeichen getrennt und Escape-Zeichen wieder entfernt werden:
%Vor%Beispiele für escape / unescape
%Vor%Teilen:
%Vor%So verwenden Sie es, vor dem Join und Unescape nach dem Split.
Tags und Links .net c# parsing split extension-methods