Javaschubla.de - Java als erste Programmiersprache

Sonderzeichen in Strings und Konkatenation

Strings (Zeichenketten) beginnen und enden mit Anführungszeichen:

    System.out.println("Hallo Welt!");
    System.out.println("abc");

Was macht man, wenn man Anführungszeichen ausgeben will? Man "escaped" (maskiert) sie mit einem Backslash (\) davor:

    System.out.println("Er sagte: \"Guten Tag!\"");

Am Ende stehen zwei Anführungszeichen. Das erste ist mit dem Backslash escaped, wird also ausgegeben. Das zweite ist das Ende des Strings.

Das Escapen benutzt man auch, wenn man Zeichen ausgeben will, die man nicht direkt eingeben kann, z.B. Zeilenumbrüche und Tabulatoren. Für Zeilenumbrüche benutzt man \n für "newline" (oder \r oder \r\n), für Tabulatoren \t.

    System.out.println("Hallo\nWelt");

gibt

Hallo
Welt

aus.

    System.out.println("Geboren:\t1980");
    System.out.println("Einschulung:\t1987");
    System.out.println("Abitur:\t2001");
    System.out.println("Weltherrschaft:\t2013");

gibt die Daten relativ ordentlich untereinander aus (nur Abitur ist zu kurz):

Geboren:        1980
Einschulung:    1987
Abitur: 2001
Weltherrschaft: 2013

Und was schreibt man, wenn man einen Backslash ausgeben will? Man escaped diesen Backslash mit einem Backslash, schreibt also \\.

    System.out.println("C:\\Windows");

gibt

C:\Windows

aus.

Merke:

\tTabulator
\nZeilenumbruch (Newline)
\""
\\\

String-Konkatenation

Strings "konkatenieren" (concat) bedeutet einfach nur "aneinanderhängen". Dafür wird das Pluszeichen verwendet.

    System.out.println("Hallo" + "Welt!");

gibt HalloWelt! aus. Die Leerzeichen um das Plus sind außerhalb der Anführungszeichen, werden also nicht mit ausgeben.

    System.out.println("Hallo"+"Welt!");

gibt genau dasselbe aus, die Leerzeichen um das Plus sind optional.

    System.out.println("Hallo " + "Welt!");

gibt Hallo Welt! aus.

Wozu soll das gut sein? Z.B. wenn ein String zu lang ist und nicht auf eine Zeile passt, kann man ihn so auf der nächsten Zeile fortsetzen.

    System.out.println("Es war einmal vor langer langer langer langer langer "
                      +"wirklich sehr sehr langer Zeit, als ...");

Man müsste den zweiten Teil nicht unbedingt so weit einrücken, das ist nur für die Übersichtlichkeit.

Das Plus ist der einzige "überladene" Operator in Java, das heißt die Bedeutung ändert sich, jenachdem zwischen welchen Typen er steht. Zwischen zwei Zahlen bedeutet es Addition, zwischen zwei Strings bedeutet es Konkatenation (Aneinanderhängen).

    System.out.println(1+2); 
    System.out.println("1"+"2");

Die erste Zeile gibt 3 aus, die zweite 12, denn in der zweiten Zeile werden nicht die Zahlen 1 und 2 addiert, sondern die Strings 1 und 2 aneinander gehängt (konkateniert).

Und was geschieht, wenn das eine eine Zahl und das andere ein String ist? Dann wird die Zahl automatisch in einen String umgewandelt und sie werden aneinandergehängt.

    System.out.println(1 + "abc");
    System.out.println("abc" + 1);
    System.out.println(1 + "2");
    System.out.println("1" + 2);

Gibt untereinander 1abc, abc1, 12 und nochmal 12 aus.

Vielleicht versucht du nun, das sinnvoll einzusetzen:

    System.out.println("Das Ergebnis von 12345+34567 ist " + 12345+34567);

Nur gibt das ärgerlicherweise Das Ergebnis von 12345+34567 ist 1234534567 aus, statt die Summe zu berechnen. Das liegt daran, dass zuerst ein String kommt, dann wird die Zahl 12345 in den String "12345" umgewandelt und an ihn angehängt und anschließend wird die Zahl 34567 in den String 34567 umgewandelt und ebenfalls angehängt. Das kann man durch Klammern einfach verhindern:

    System.out.println("Das Ergebnis von 12345+34567 ist " + (12345+34567));

gibt wie gewünscht

Das Ergebnis von 12345+34567 ist 46912

aus. Wahrscheinlich möchte man noch einen Punkt am Ende:

    System.out.println("Das Ergebnis von 12345+34567 ist " + (12345+34567) + ".");

Wenn zuerst Zahlen kommen, werden diese addiert, so lange bis ein String auftaucht:

    System.out.println(1+2+"abc"+3+4);

gibt

3abc34

aus.

Übung

Probiere diese Sachen aus!


Im nächsten Kapitel wird ein grafisches Programm gezeigt, nur um mal zu sehen, dass das in Java geht.