[vb.net] Split mit mehreren Delimiter

Gepostet am: Apr 13, 2011 2:59:8 PM

Es gibt grundsätzlich mehrere Möglichkeiten, einen String mit mehreren Delimitern zu trennen

Textfeld

Dim sString as String = "....."Dim args as String() = sString.Split(New String() {"/","_",":"}, Nothing)

Multisplit

Private Function MultiSplit(ByVal StringToParse As String, ByVal Delimiter() As String, Optional ByVal trimmode As Integer = 0) As String()         ' Diese Funktion zerlegt einen eingegebenen Text mit beliebige vielen Delimitern als String Array         ' Es wird ein Array zurückgegeben, welches die gefundenen Elemente enthält.         ' werden die Delimiter mit einem \ übergeben, werden sie ignoriert         ' Bsp: Multisplit("zer|leg/e_mich",{"|","/","_"})         Dim a As Integer = 1          ' Ermitteln einer Zeichenkette, die im Text nie vorkommt         Dim replacetext As String = " " 'ein String, der so gut wie in in einem Text vorkommt         Do             For i As Integer = 128 To 255 'durchlaufe die Character 128-255                 If Not (StringToParse.Contains(Chr(i))) Then 'Teste ob der Char vorkommt                     replacetext = replacetext & Chr(i) 'setzte das Zeichen, das nicht vorkommt als neuen Delimiter                     Exit For                 End If             Next             If Not (Len(replacetext) > a) Then 'prüfen, ob sich der String überhaupt verändert hat                 replacetext = replacetext & Chr(142)                 a = a + 1             End If         Loop Until Not (StringToParse.Contains(Trim(replacetext))) 'durchlaufe den Text solange, bis er nicht gefunden wird         replacetext = Trim(replacetext) 'Leerzeichen entfernen            'Hauptfunktion         For Each Element As String In Delimiter             StringToParse = Replace(StringToParse, Element, replacetext) 'die eigentlichen Delimiter durch den neuen ersetzen         Next          Dim mySplit As String() = Split(StringToParse, replacetext) ' nun der eigentliche Splitvorgang          ' gegebenenfalls noch trimmen         If trimmode <> 0 Then 'sofern nicht nicht getrimmt werden soll             For Each Element As String In mySplit 'den neuen Array durchlaufen                  Select Case trimmode                     Case 1                         Element = LTrim(Element)                     Case 2                         Element = RTrim(Element)                     Case 3                         Element = Trim(Element)                 End Select             Next         End If          Return mySplit End Function