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.
                      
indexOfliefert die Position des ersten Auftretens
valueOfliefert 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