Ruby-Programmierung: Strings

Aus Wikibooks

Zurück zum Inhaltsverzeichnis.

String ist der erste Datentyp in diesem Buch, der Ihnen explizit und ausführlich vorgestellt wird. Dabei ist String die Bezeichnung für eine Zeichenkette. Sie haben Strings bereits ganz zu Beginn des Buches kennengelernt, in Form von puts "Hallo Welt!" und auch schon einige Methoden im Umgang mit Strings. Diese Seite soll nun Strings genauer beleuchten und einige Tücken im Umgang mit ihnen klären.

Für Programmierer anderer Sprachen, insbesondere C-Ähnlichen, ist zu sagen, dass Strings kein Array aus Zeichen sind, sondern ein eigener Datentyp. Der String ersetzt dabei einzelne Zeichen komplett und ein einzelnes Zeichen ist einfach ein String der Länge eins.

Anführungszeichen[Bearbeiten]

Strings können auf mehrere Arten begrenzt werden. Es gibt die Möglichkeit, sie durch einfache und doppelte Anführungszeichen zu kennzeichnen. Der Unterschied besteht darin, ob innerhalb des Strings bestimmte Zeichenketten gesondert ausgewertet werden. Wenn man die Ausgabe des folgenden Skripts betrachtet, stellt man genau diesen Unterschied fest.

Für Strings existiert die Möglichkeit, sie mit folgender Syntax zu definieren %(String). Die Wahl von Begrenzern ist dabei relativ frei, so können Sie statt %() auch unter anderem eckige und geschweifte Klammern verwenden. Das ist insbesondere von Vorteil, wenn Sie mit Strings umgehen müssen, die viele Anführungszeichen enthalten.

a = 5
puts '#{ a }'
puts "#{ a }"
puts %(#{ a })

Man nennt den String mit doppelten Anführungszeichen Formatstring. In einem Formatstring stehen wie oben erwähnt bestimmte Escape-Sequenzen zur Verfügung, die das Layout der Ausgabe ändern.

  • Einfache Anführungszeichen
    • \' – einfache Anführungszeichen
    • \\ – single backslash
  • Doppelte Anführungszeichen

Einfügen von Variablen in Strings[Bearbeiten]

Auf der Seite Rechnen wurde bereits eine Variable an einen String angefügt. Dies geschah durch die Methode + und dem Umformen der Zahl zu einem String. Dieses Verfahren ist natürlich auch an dieser Stelle möglich, aber man kann sich leicht vorstellen, dass das Einfügen von mehreren Zahlen auf diese Weise sehr umständlich ist. Dafür gibt es zwei Möglichkeiten. Das folgende Listing stellt einige Möglichkeiten gegenüber:

a = 5

puts "a: #{ a }"
puts "a: " << a.to_s
puts "a: " + a.to_s

Da die erste Variante auch bei vielen Variablen und einem großen String übersichtlich bleibt, ist das die konventionelle Vorgehensweise beim erstellen einen Strings mit Daten des Programms. Liegen die Strings nicht als Konstante vor, sondern nur als Variable kann es notwending sein eine der beiden anderen Methoden zu verwenden. Man sollte dann die Lesbarkeit von string << data.to_s mit "#{ string }#{ data }" zu vergleichen. Der wesentliche Unterschied zwischen + und << ist, dass + ein neues Objekt erzeugt und dadurch wesentlich langsamer ist als <<. Die Verwendung von << kann dahingegen zu unerwünschten Nebeneffekten führen:

def append_world_to(string)
  string << "World"
end

s = "Hello "
result = append_world_to(s)
puts result
puts s

In diesem Fall hat die Methode append_world_to den (möglichweise unerwünschten) Nebeneffekt, dass es nicht nur ein neues Ergebniss produziert, sondern auch das Original manipuliert.

Teilstrings[Bearbeiten]

Nicht nur kann es nötig sein Daten in Strings einzufügen, sondern sie auch wieder zu extrahieren bzw. Teilstrings zu erzeugen.

s = "Hallo Wikipedia!"
puts s[0]
puts s[0,5]
puts s["Wikipedia"]
puts s["Welt"]
puts s[/\w+/]

Der Zugriff mit einem String gibt den Text aus, wenn der entsprechende String vorkommt. Die anderen Methoden sind angelehnt an den Zugriff auf Arrays oder nutzen Reguläre Ausdrücke, daher sollten Sie eventuell die entsprechenden Kapitel dieses Buches zunächst aufsuchen. Der Zugriff mit Zahlen bezieht sich auf die Position im String und bei der Verwendung von Regulären Ausdrücken wird der erste Treffer ausgewählt.

Symbole[Bearbeiten]

Symbole sind spezialisierte Strings, die vor allem zur internen Darstellung von Zeichenketten in der Software dienen. Im Gegensatz zu Strings, die bei jedem Auftreffen einer Konstante neu erzeugt werden müssen werden Symbole nur einmal erzeugt und danach behalten, dadurch erlauben sich in bestimmten Fällen Geschwindigkeitsvorteile. Symbole werden auch häufig verwendet, wenn man Meta-Programmiert. Die Initialisierung erfolgt durch vorranstellen eines Doppelpunktes vor einen String, falls der String aus nur einem Wort besteht, kann auf die Anführungszeichen auch ganz verzichtet werden.

puts :hello
puts :"Hello World"
puts :'Hello Reader'