Die Programmiersprache Ruby (German Edition)
Kodierung des String darstellt:
alphabet = "A"
alphabet << ?B # alphabet ist jetzt "AB"
alphabet << 67 # Und jetzt ist es "ABC"
alphabet << 256 # Fehler in Ruby 1.8: Codes müssen >=0 und < 256 sein
Der Operator
*
erwartet einen Integer als rechten Operanden. Er liefert einen String zurück, der den auf der linken Seite festgelegten Text so oft wiederholt, wie die rechte Seite angibt:
ellipsis = '.' * 3 # Ergibt '...'
Wenn der linke Operand ein String-Literal ist, wird jegliche Interpolation nur einmal vor der Wiederholung ausgeführt. Das heißt, dass der folgende zu schlaue Code nicht das tut, was Sie möglicherweise von ihm erwarten:
a = 0;
"#{a=a+1} " * 3 # Gibt "1 1 1 " zurück, nicht "1 2 3 "
String
definiert alle Standard-Vergleichsoperatoren.
==
und
!=
vergleichen Strings auf Gleichheit beziehungsweise Ungleichheit. Zwei Strings sind gleich, wenn – und nur wenn – sie dieselbe Länge haben und alle Zeichen identisch sind.
<
,
<=
,
>
und
>=
vergleichen die relative Reihenfolge von Strings, indem sie die Zeichencodes der Zeichen vergleichen, aus denen ein String besteht. Wenn ein String den Anfang eines anderen bildet, dann ist der kürzere String kleiner als der längere. Der Vergleich basiert ausschließlich auf Zeichencodes. Es findet keinerlei Normalisierung statt, und die Sortierreinfolge natürlicher Sprachen (sofern sie sich von der numerischen Abfolge der Zeichencodes unterscheidet) wird ignoriert.
String-Vergleiche unterscheiden zwischen Groß- und Kleinschreibung. [ 8 ] Denken Sie daran, dass sämtliche Großbuchstaben in ASCII niedrigere Codenummern haben als die Kleinbuchstaben. Das bedeutet zum Beispiel, dass
"Z" < "a"
gilt. Für Vergleiche von ASCII-Zeichen ohne Unterscheidung von Groß- und Kleinschreibung können Sie die Methode
casecmp
verwenden (siehe „9.1 Strings“ ) oder Ihre Strings mithilfe der Methoden
downcase
oder
upcase
in eine identische Schreibweise konvertieren, bevor Sie sie vergleichen. (Behalten Sie im Hinterkopf, dass Rubys Kenntnisse über Groß- und Kleinschreibung auf den ASCII-Zeichensatz beschränkt sind.)
3.2.4 Zugriff auf Zeichen und Teil-Strings
Der vielleicht wichtigste Operator, den
String
unterstützt, ist der Array-Index-Operator in Form eckiger Klammern
[]
, der zum Extrahieren oder Ändern von Teilen eines String verwendet wird. Dieser Operator ist recht flexibel und kann mit einer Anzahl unterschiedlicher Operandentypen verwendet werden. Er kann auch auf der linken Seite einer Wertzuweisung verwendet werden, um String-Inhalte zu modifizieren.
In Ruby 1.8 entspricht ein String einem Array von Bytes oder 8-Bit-Zeichencodes. Die Länge dieses Array wird mithilfe der Methoden
length
oder
size
ermittelt, und Sie können Elemente des Array einfach lesen oder setzen, indem Sie die Zeichennummer in eckigen Klammern angeben:
s = 'hallo'; # Ruby 1.8
s[0] # 104: ASCII-Zeichencode für das Zeichen 'h'
s[s.length-1] # 111: ASCII-Zeichencode des letzten Zeichens 'o'
s[-1] # 111: Andere Zugriffsmöglichkeit für das letzte Zeichen
s[-2] # 108: Das vorletzte Zeichen
s[-s.length] # 104: Andere Zugriffsmöglichkeit für das erste Zeichen
s[s.length] # nil: Es gibt kein Zeichen mit diesem Index
Beachten Sie, dass negative Array-Indizes eine mit 1 beginnende Position vom Ende des String aus bezeichnen. Beachten Sie auch, dass Ruby keine Ausnahme auslöst, wenn Sie versuchen, auf ein Zeichen hinter dem Ende zuzugreifen; stattdessen wird einfach
nil
zurückgegeben.
Ruby 1.9 liefert Strings aus einzelnen Zeichen statt Code zurück, wenn Sie ein einzelnes Zeichen indexieren. Bedenken Sie bei der Arbeit mit Multibyte-Strings, in denen Zeichen mit variabler Byteanzahl kodiert sind, dass der beliebige Zugriff auf Zeichen weniger effizient ist als derjenige auf die zugrunde liegenden Bytes:
s = 'hallo'; # Ruby 1.9
s[0] # 'h': Das erste Zeichen des String, als String
s[s.length-1] # 'o': Das letzte Zeichen 'o'
s[-1] # 'o': Andere Zugriffsmöglichkeit für das letzte Zeichen
s[-2] # 'l': Das vorletzte Zeichen
s[-s.length] # 'h': Andere Zugriffsmöglichkeit für das erste Zeichen
s[s.length] # nil: Es gibt kein Zeichen mit diesem Index
Um einzelne Zeichen eines Strings zu modifizieren, können Sie die eckigen Klammern einfach auf der linken Seite einer Zuweisungsoperation verwenden. In Ruby 1.8 kann die rechte Seite ein ASCII-Zeichencode oder ein String sein. In Ruby 1.9 muss auf der rechten Seite ein String stehen. Zeichenliterale können Sie in beiden Versionen der Sprache
Weitere Kostenlose Bücher