C # Erweiterung Methode - String Split, der auch ein Escape-Zeichen akzeptiert

7

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".

    
BuddyJoe 11.03.2009, 14:36
quelle

10 Antworten

12

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.

    
Jon Skeet 11.03.2009, 14:44
quelle
7

Das muss etwas aufgeräumt werden, aber das ist es im Wesentlichen ....

%Vor%     
James Curran 11.03.2009 14:41
quelle
4

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.

    
tvanfosson 11.03.2009 14:46
quelle
4

Hier ist die Lösung, wenn Sie das Escape-Zeichen entfernen möchten.

%Vor%     
quelle
3

Sie können so etwas versuchen. Obwohl, würde ich vorschlagen, mit unsafe-Code für leistungskritische Aufgaben zu implementieren.

%Vor%     
Biscuits 22.08.2013 14:04
quelle
3
%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.

    
BFree 11.03.2009 14:52
quelle
1

Die Signatur ist falsch, Sie müssen ein Zeichenfolgenarray

zurückgeben

WARNIG NIEMALS VERLÄNGERUNGEN VERWENDET, also verzeiht mir einige Fehler;)

%Vor%     
RvdK 11.03.2009 14:44
quelle
1
___ qstnhdr ___ C # Erweiterung Methode - String Split, der auch ein Escape-Zeichen akzeptiert ___ answer634805 ___

Das muss etwas aufgeräumt werden, aber das ist es im Wesentlichen ....

%Vor%     
___ answer634825 ___

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.

    
___ answer635074 ___

Hier ist die Lösung, wenn Sie das Escape-Zeichen entfernen möchten.

%Vor%     
___ answer18382742 ___

Sie können so etwas versuchen. Obwohl, würde ich vorschlagen, mit unsafe-Code für leistungskritische Aufgaben zu implementieren.

%Vor%     
___ qstntxt ___

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".

    
___ answer634814 ___

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.

    
___ answer634813 ___

Die Signatur ist falsch, Sie müssen ein Zeichenfolgenarray

zurückgeben

WARNIG NIEMALS VERLÄNGERUNGEN VERWENDET, also verzeiht mir einige Fehler;)

%Vor%     
___ answer634874 ___
%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.

    
___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die für die Erstellung einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ tag123net ___ Das .NET-Framework ist ein Software-Framework, das hauptsächlich für das Microsoft Windows-Betriebssystem entwickelt wurde. Es enthält eine Implementierung der Basisklassenbibliothek, Common Language Runtime (allgemein als CLR bezeichnet), Common Type System (allgemein als CTS bezeichnet) und Dynamic Language Runtime. Es unterstützt viele Programmiersprachen, einschließlich C #, VB.NET, F # und C ++ / CLI. NICHT für Fragen zu .NET Core verwenden. ___ tag123parsing ___ Parsing bezieht sich auf das Brechen eines Artefakts in seine konstituierenden Elemente und das Erfassen der Beziehung zwischen diesen Elementen. Dieses Tag ist nicht für Fragen zum gehosteten Dienst Parse.com ([parse.com] verwenden) oder analysiert Fehler in einer bestimmten Programmiersprache (verwenden Sie stattdessen das entsprechende Sprachen-Tag). ___ tag123split ___ Verwenden Sie dieses Tag für Fragen zum Trennen eines Elements (z. B. einer Zeichenfolge) in Teile, oft durch ein Trennzeichen oder einen regulären Ausdruck. ___ answer634860 ​​___

Persönlich würde ich betrügen und einen Blick auf string.Split mit Reflektor ... InternalSplitOmitEmptyEntries sieht nützlich; -)

    
___ answer28091805 ___

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.

    
___ tag123extensionmethods ___ Eine Erweiterungsmethode ist eine Sprachfunktion von Swift, Visual Basic.NET und c #. Erweiterungsmethoden ermöglichen es Ihnen, Methoden zu vorhandenen Typen hinzuzufügen, ohne einen neuen abgeleiteten Typ zu erstellen, den Originaltyp neu zu kompilieren oder anderweitig zu ändern. ___ answer1194034 ___
%Vor%     
___
si618 11.03.2009 14:51
quelle
1

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.

    
Stefan Steinegger 22.01.2015 14:55
quelle
0
%Vor%     
Pravin Lanjankar 28.07.2009 13:16
quelle