Visual Basic .NET: Zeichenkettenoperatoren

Aus Wikibooks

Die bisherigen Operatoren konnten nur mit Zahlen oder Boolean-Werten umgehen, es gibt jedoch auch zwei Operatoren für Zeichen und Zeichenketten.

Verkettung[Bearbeiten]

Der Verkettungsoperator & verlangt zwei Parameter vom Typ Char oder String. Diese beiden Zeichen(ketten) werden aneinandergehängt und das Ergebnis zurückgegeben. Der Rückgabewert ist immer vom Typ String.

Code:  

Dim a As String = "abc", b As String = "def", c1 As String, c2 As String, c3 As String
c1 = a & b       'gibt "abcdef" zurück
c2 = b & a       'gibt "defabc" zurück
c3 = a & "g" & b 'gibt "abcgdef" zurück

Ausgabe:  

c1 = "abcdef"
c2 = "defabc"
c3 = "abcgdef"

In der ersten Zeile werden drei String-Variablen deklariert, von denen zwei mit einfachen Werten initialisiert werden. Die Variable c dient als Zwischenspeicher für die Ergebnisse der Verkettungsoperationen. In der zweiten Zeile werden a und b verkettet. Das Ergebnis besteht also aus den Zeichenketten „abc“ und „def“, die zu „abcdef“ verkettet werden.

Die zweite Zeile offenbart, dass die Verkettung von a und b von der Verkettung von b und a verschieden ist. Während im ersten Fall die Zeichenkette von a im Ergebnis vor der Zeichenkette von b auftaucht, sind sie im zweiten Fall genau vertauscht. Das Ergebnis ist also nicht „abcdef“, sondern „defabc“. Der rechte Operand wird also immer an den linken Operanden angehängt und das Ergebnis zurückgegeben.

Die dritte Zeile zeigt, dass man, wie bei allen anderen Operationen auch, mehrere Operationen gleichzeitig ausgeführt werden können, und, dass man wie immer auch Werte verwenden kann, die nicht in Variablen gespeichert sind, sondern direkt im Code angegeben sind.

Vergleich[Bearbeiten]

Sicherlich kennen Sie die Suchfunktion von Windows, mit der nach Dateien mit bestimmten Namen gesucht werden kann. Dabei kann man, wenn man den genauen Namen der Datei nicht weiß, bestimmte Platzhalter verwenden. Etwa bedeutet ein Sternchen im Suchbegriff, dass im eigentlichen Dateinamen an der entsprechenden Stelle beliebig viele andere Zeichen stehen können. So findet man mit dem Suchmuster „*.doc“ Dateien wie „Brief.doc“ und „Lebenslauf.doc“. Eine ähnliche Funktionalität bietet auch Visual Basic mit dem Like-Operator. Dieser Operator verlangt zwei String-Operanden, der linke entspricht dem Dateinamen in der Windows-Suche, der rechte entspricht dem Suchmuster.

Einfach gesprochen vergleicht Like also zwei Zeichenfolgen. Geht der Vergleich positiv aus, also entspricht die Zeichenfolge dem Muster, so wird True zurückgegeben, sonst False. Dabei können verschiedene Platzhalter, sogenannte Wildcards, verwendet werden. Ein Beispiel ist das Sternchen, dass für beliebig viele beliebige Zeichen oder auch für kein Zeichen stehen kann.

Code:  

Dim a As Boolean = "ab" Like "ab"
Dim b As Boolean = "ab" Like "ac"
Dim c As Boolean = "aaa" Like "a*a" 'liefert "True", da ein Sternchen rechts für beliebig viele Zeichen links stehen kann
Dim d As Boolean = "aa" Like "a*a"  'liefert "True", da ein Sternchen rechts auch für keine Zeichen links stehen kann
Dim e As Boolean = "a" Like "a*a"   'liefert "False", da links mindestens die rechts enthaltenen zwei "a" vorhanden sein müssen

Ausgabe:  

a = True
b = False
c = True
d = True
e = False

Zu a: Die Zeichenkette links entspricht dem Muster rechts.
Zu b: Das Muster rechts entspricht nicht der Zeichenfolge links. ("ac" entspricht nicht "ab".)
Zu c: Ein Sternchen rechts kann für beliebig viele Zeichen links stehen. (Hier steht das Sternchen für ein "a".)
Zu d: Das Sternchen kann auch für kein Zeichen stehen, so wie hier.
Zu e: Die hintere "a" im Muster finden keine Entsprechung in der Zeichenfolge links.

Es gibt noch zwei weitere Platzhalter. Ein Fragezeichen kann immer nur für genau ein Zeichen stehen, nicht mehr und nicht weniger. Eine Raute (#) steht für genau eine Ziffer von 0 bis 9.

Code:  

Dim a As Boolean = "a" Like "?*"
Dim b As Boolean = "a" Like "??*"
Dim c As Boolean = "12345" Like "##?##"
Dim d As Boolean = "abcde" Like "??#??"

Ausgabe:  

a = True
b = False
c = True
d = False

Zu a: Das Fragezeichen repräsentiert das "a" und das Sternchen nichts.
Zu b: Die zwei Fragezeichen müssen für zwei Zeichen links stehen, dort ist aber nur eines.
Zu c: Jede der Wildcards findet ihre Entsprechung in einem der linken Zeichen.
Zu d: "c" ist keine Ziffer.

Schließt man im Muster eine Menge von Zeichen in eckige Klammern ein, so repräsentiert dieses Muster genau ein Zeichen aus der angegebenen Menge von Zeichen. So repräsentiert „[AaZz]“ entweder ein großes oder ein kleines A oder ein großes oder ein kleines Z. Setzt man vor die Zeichenmenge, direkt hinter der öffnenden eckigen Klammer, ein Ausrufezeichen, wird die Zeichenmenge umgekehrt. Das Muster steht dann nicht mehr für eines der angegebenen Zeichen, sondern für ein beliebiges Zeichen, das nicht angegeben wurde. So repräsentiert „[!ABC]“ zum Beispiel Buchstaben wie „D“ oder „Z“ oder auch Sonderzeichen und Zahlen, aber keinen der Buchstaben „A“, „B“ oder „C“.

Soll ein Zeichen aus einem bestimmten Zeichenbereich vorkommen, so kann der Zeichenbereich in eckigen Klammern eingeschlossen werden. Innerhalb der Klammern steht das erste und das letzte Zeichen des Bereiches, getrennt durch einen Bindestrich. Das Muster „[A-Z]“ repräsentiert z.B. genau einen Großbuchstaben, das Muster „[A-C]“ repräsentiert nur entweder „A“, „B“ oder „C“. Wie man sieht, ist also das Muster „#“ zu „[0-9]“ äquivalent. Auch bei Buchstabenbereichen funktioniert das Ausrufezeichen zur Umkehr. Während „[A-Z]“ einen Großbuchstaben repräsentiert, steht „[!A-Z]“ für ein beliebiges Zeichen, das kein Großbuchstabe ist.

Soll ein Fragezeichen, eine Raute oder ein Sternchen so in der linken Zeichenfolge vorkommen, muss das jew. Zeichen im Muster in eckige Klammern eingeschlossen werden. Dann wird es nicht als Wildcard interpretiert. Das gleiche gilt für die öffnende eckige Klammer, die in eckige Klammern eingeschlossen werden muss, um ihre spezielle Funktion zu verlieren. Das Muster „[[]“ steht also für genau eine öffnende eckige Klammer in der linken Zeichenfolge. Die schließende eckige Klammer kann aus offensichtlichen Gründen im Muster nicht innerhalb von eckigen Klammern stehen, um sich selbst in der linken Zeichenfolge zu repräsentieren. Es kann jedoch außerhalb von eckigen Klammern verwendet werden, um für sich selbst zu stehen.

Code:  

Dim a As Boolean = "a" Like "?"
Dim b As Boolean = "a" Like "[?]"
Dim c As Boolean = "[]" Like "[[]]"

Ausgabe:  

a = True
b = False
c = True

Zu a: Das Fragezeichen findet seine Entsprechung in dem "a".
Zu b: Dieses Fragezeichen ist in eckige Klammern eingeschlossen und somit keine Wildcard mehr. Es kann nur für sich selbst stehen.
Zu c: Die öffnende eckige Klammer links passt zu "[[]" rechts und die schließende Klammer links passt zur schließenden Klammer rechts.