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"
itmapa.de - X2H V 0.20



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)
  }  
}
itmapa.de - X2H V 0.20

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)
  }
}
itmapa.de - X2H V 0.21

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)
  }
}
itmapa.de - X2H V 0.21

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


scala.collection.StringOps API Dokumentation Flagge Großbritanien

Java 7 String API Dokumentation Flagge Großbritanien