Strings
Stand: 19. August 2013
Einstieg
Strings werden in Computerprogrammen mit grafischer Benutzerschnittstelle sehr häufig verwendet. Wir verwenden Sie um den Text von Label, Textfeldern, Buttons ... zu definieren oder auch um den Text einer Webseite darzustellen. Strings sind dabei eine Aneinanderreihung von einzelnen Zeichen (engl. Characters), die zusammengesetzt den String ergeben.
Scala bringt keine eigene
String
-Klasse mit, sondern verwendet die
String
-Klasse von Java. In Scala haben wir jedoch weitaus mehr Möglichkeiten mit Zeichenketten (engl. Strings) zu arbeiten als in Java. Dies liegt vor allem daran, dass wenn erforderlich, ein Java-String zum Beispiel implizit in ein Scala-
scala.collection.immutable.StringOps
umgewandelt wird, so dass wir einen String wie eine indizierte Sequenz behandeln können. Demnach könnten wir Strings auch im Bereich der Collections behandeln.
In diesem Kapitel wollen wir uns die Möglichkeiten von Zeichenketten in Scala näher anschauen.
String Literale
Es gibt verschiedene Möglichkeiten in Scala String Literale zu definieren. Die einfachste Art ist, die entsprechende Zeichenkette zwischen zwei Anführungszeichen zu setzen. Beispiele für diese einfache Form der String Literale sind:
"Hello world!" "My name is ..." "433" "353.4" "Programming in Scala"
Die so definierten
String
-Literale können wir Variablen zuordnen um dann im Quelltext statt des Literals die Variable zu verwenden. Wird das
String
-Literal an mehreren Stellen verwendet, brauchen wir es bei Bedarf nur ein einer Stelle zu bearbeiten.
val myString = "Hello world!" val myAnswer = "42"
Mthoden der Klasse
String
Die Klasse
String
ist ein unveränderlicher Datentyp (in Scala und in Java). Dies bedeutet, dass alle Operatoren / Methoden auf einen
String
den
String
nicht verändern, sondern dass ein neuer
String
erzeugt und zurückgegeben wird.
In diesem Abschnitt solllen nachfolgend einige wichtige Methoden der Klasse
String
vorgestellt werden.
indexOf
liefert die Position des ersten Auftretens
valueOf
liefert eine String Repräsentation
String
als Collection
Wie oben erwähnt, wird ein
String
bei Bedarf implizit in ein
scala.collection.immutable.StringOps
umgewandelt und kann so als eine indizierte Sequenz behandelt werden. Wenn wir uns veranschaulichen, dass ein
String
eine Aneinanderreihung von einzelnen Zeichen ist, scheint die Behaldlung eines
String
mehr als logisch. In diesem Abschnitt wollen wir uns die Möglichkeiten der Collections im Zusammenhang mit Strings ansehen.
Als erstes wollen wir uns ein Beispiel ansehen, wo Collection-Funktionalität auf Strings angewendet wird. Für dieses Beispiel bedienen wir uns der
foreach
-Methode um jedes Zeichen einer Zeichenkette auf der Systemausgabe auszugeben.
object StringForEach { def main(args: Array[String]): Unit = { val myString = "Hello" myString.foreach((c: Char) => println(c)) myString.foreach(println) } }
Die Ausführung des Programms führt zur zweimaligen, vertikalen Ausgabe von "Hello".
H e l l o H e l l o
In der ersten Verwendung von
foreach
sehen wir, dass wir der Methode eine Funktion übergeben um die einzelnen Zeichen auf der Systemausgabe auszugeben. Durch die implizite Konvertierung des Strings können wir mit Funktionen höherer Ordnung auf Zeichenketten arbeiten. Die zweite Anwendung von
foreach
stellt lediglich die Kurzform der ersten Anwendung dar.
Mehrzeilige Strings
Manchmal möchten wir Strings ausgeben, die sich über mehrere Zeilen erstrecken. Mit den uns bis jetzt bekannten Mitteln ist dies nur möglich, indem wir mehrere String - Ausgaben machen. Scala bietet uns mit den 3-fachen Anführungszeichen die Möglichkeit, mehrzeilige Strings zu definieren, was im nachfolgenden Beispiel gezeigt werden soll.
object StringExample { def main(args: Array[String]): Unit = { val myString = """Zeile 1 Zeile 2 Zeile 3""".stripMargin println(myString) } }
Die Ausführung des Programms führt zu folgender Ausgabe auf der Systemausgabe:
Zeile 1 Zeile 2 Zeile 3
Mit den 3-fachen Anführungszeichen können wir jetzt zwar Strings in mehreren Zeilen definieren, aber die Ausrichtung der Strings lässt unter Umständen jedoch zu wünschen über. Abhilfe schafft hier die Methode
scala.collection.immutable.StringLike#stripMargin
. In der Version ohne Parameter werden die Strings am Pipesymbol
|
ausgerichtet. Die zweite Variante von
stripMargin
ermöglicht die Übergabe eines Zeiches, an dem der String ausgerichtet werden soll.
object StringExample { def main(args: Array[String]): Unit = { val myString = """ |Zeile 1 |Zeile 2 |Zeile 3""".stripMargin println(myString) val myString2 = """ #Zeile 1 #Zeile 2 #Zeile 3""".stripMargin('#') println(myString2) } }
Die Ausführung des Programms führt zu folgender Ausgabe auf der Systemausgabe:
Zeile 1 Zeile 2 Zeile 3 Zeile 1 Zeile 2 Zeile 3
Links
scala.collection.StringOps
API Dokumentation
Java 7 String API Dokumentation