Die Programmiersprache Ruby (German Edition)
verwenden:
s[0] = ?H # Erstes Zeichen durch großes H ersetzen
s[-1] = ?O # Letztes Zeichen durch großes O ersetzen
s[s.length] = ?! # FEHLER! Keine Zuweisung hinter dem String-Ende möglich
Die rechte Seite einer Zuweisungsanweisung wie dieser braucht kein Zeichencode zu sein; es kann ein beliebiger String sein, darunter auch ein String aus mehreren Zeichen oder der leere String. Auch dies funktioniert sowohl in Ruby 1.8 als auch in Ruby 1.9:
s = "Hallo" # Mit einem Gruß beginnen
s[-1] = "" # Letztes Zeichen löschen; s ist jetzt "Hall"
s[-1] = "t!" # Letztes Zeichen ändern, eins hinzufügen; s ist jetzt "Halt!"
In vielen Fällen möchten Sie Teil-Strings aus einem String ermitteln und keine einzelnen Zeichen. Verwenden Sie dazu zwei durch Komma getrennte Operanden zwischen den eckigen Klammern. Der erste Operand gibt einen Index an (der negativ sein darf), der zweite eine Länge (die nicht negativ sein darf). Das Ergebnis ist der Teil-String, der beim angegebenen Index beginnt und die angegebene Anzahl von Zeichen lang ist:
s = "hallo"
s[0,2] # "ha"
s[-1,1] # "o": Liefert einen String, nicht den Zeichencode ?o
s[0,0] # "": ein Teilstring der Länge 0 ist immer leer
s[0,10] # "hallo": Gibt alle verfügbaren Zeichen zurück
s[s.length,1] # "": Unmittelbar hinter dem Ende ist ein leerer String
s[s.length+1,1] # nil: Es ist ein Fehler, darüber hinauszulesen
s[0,-1] # nil: Negative Längen ergeben keinen Sinn
Wenn Sie einem auf diese Art indexierten String einen String zuweisen, ersetzen Sie den angegegebenen Teil-String durch den neuen String. Wenn die rechte Seite der leere String ist, findet eine Löschung statt, und wenn die linke Seite die Länge null hat, handelt es sich um einen Einfügevorgang:
s = "hallo"
s[0,1] = "H" # Erstes Zeichen durch Großbuchstaben ersetzen
s[s.length,0] = " Welt" # Anfügen durch Zuweisung hinter dem String-Ende
s[5,0] = "," # Komma einfügen, ohne etwas zu löschen
s[5,5] = "" # Löschen ohne einzufügen; s == "Hallot"
Eine weitere Möglichkeit, einen Teilstring zu extrahieren, einzufügen, zu löschen oder zu ersetzen, besteht darin, einen String durch ein
Range
-Objekt zu indexieren. Bereiche werden wir detailliert weiter unten in „3.5 Bereiche“ besprechen. Für unsere Zwecke brauchen wir hier nur zu wissen, dass ein
Range
aus zwei durch Punkte getrennten Integer-Werten besteht. Wenn ein
Range
als Index eines String verwendet wird, ist der Rückgabewert der Teil-String, dessen Zeichen innerhalb des
Range
liegen:
s = "Hallo"
s[2..3] # "ll": Zeichen 2 und 3
s[-3..-1] # "llo": Negative Indizes funktionieren auch
s[0..0] # "H": Dieser Bereich enthält nur einen Zeichenindex
s[0...0] # "": Dieser Bereich ist leer
s[2..1] # "": Dieser Bereich ist ebenfalls leer
s[7..10] # nil: Dieser Bereich ist außerhalb der String-Grenzen
s[-2..-1] = "t!" # Ersetzung: s wird "Halt!"
s[0...0] = "Bitte " # Einfügung: s wird "Bitte Halt!"
s[5..9] = "" # Löschung: s wird "Bitte!"
Verwechseln Sie String-Indexierung mit zwei durch Komma getrennten Integern nicht mit dieser Form, die ein einzelnes
Range
-Objekt verwendet. Wenngleich in beiden zwei Integer vorkommen, gibt es einen wichtigen Unterschied: Die Form mit Komma gibt einen Index und eine Länge an; die Form, die ein
Range
-Objekt verwendet, gibt dagegen zwei Indizes an.
Es ist sogar möglich, einen String mit einem String zu Indexieren. Wenn Sie das tun, ist der Rückgabewert der erste Teil-String des Zielstring, auf den der Index-String passt, oder
nil
, falls kein Treffer erzielt wird. Diese Form der String-Indexierung ist nur auf der linken Seite einer Zuweisungsanweisung nützlich, wenn Sie den gefundenen String durch einen anderen ersetzen möchten:
s = "hello" # Mit dem Wort "hallo" beginnen
while(s["l"]) # Solange der String den Teilstring "l" enthält
s["l"] = "L"; # Das erste Vorkommen von "l" durch "L" ersetzen
end # Jetzt haben wir "haLLo"
Schließlich können Sie einen String auch mit einem regulären Ausdruck indexieren. (Reguläre Ausdrücke werden in „9.2 Reguläre Ausdrücke“ behandelt.) Das Ergebnis ist der erste Teil-String des String, auf den das Muster passt, und auch diese Form der String-Indexierung ist am nützlichsten, wenn sie auf der linken Seite einer Zuweisung verwedet wird:
s[/[aeiou]/] = '*' # Den ersten Vokal durch ein Sternchen ersetzen
3.2.5 Über Strings iterieren
In Ruby 1.8 definiert die Klasse
String
eine Methode
each
, die zeilenweise über einen String iteriert. Die Klasse
String
enthält
Weitere Kostenlose Bücher