IF-Abfragen mit Strings

Die Abfrage eines Zahlenwertes war ja relativ einfach. Zur Erinnerung:


                 [...]
                 if (Zahl == 5) {
                         System.out.println("Die Zahl war 5");
                 }
                 else {
                         System.out.println("Die Zahl war keine 5");
                 }
                 [...]

Dummerweise funktioniert diese Vorgehensweise bei Strings nicht. if(Zahl == "fünf") ist in JAVA ein Fehler. Die Abfrage von Strings ist in JAVA etwas anders. Der Code sieht so aus:


                 [...]
                 if (Zahl.equals("fünf") {
                         System.out.println("Die Zahl war fünf");
                 }
                 else {
                         System.out.println("Die Zahl war nicht fünf");
                 }
                 [...]

Warum zur Hölle kann man nun einen String nicht auch mit == auf Gleichheit testen? Muss das wieder so kompliziert sein???
OK, muss nicht, macht aber Sinn. Ich hatte im Kapitel über Zuweisungen die Datentypen vorgestellt und dabei erwähnt das String kein Grundtyp ist, sondern ein Literal, also ein Datentyp, der aus dem Datentyp Char zusammengesetzt wird. Also ist String als Klasse vorhanden. Klassen haben aber Methoden und die Methode .equals() vergleicht den Inhalt der Variable mit dem angegebenen String.

Die Methoden zum vergleichen von Strings sind:

  • Variable.equals("Wert") entspricht gleich
  • Variable.equalsIgnoreCase("Wert") entspricht gleich, achtet aber nicht auf Groß- und Kleinschreibung
  • Variable.startsWith("Wert") testet ob ein String mit "Wert" beginnt
  • Variable.endsWith("Wert") testet ob ein String mit "Wert" endet

Jede dieser Abfragen gibt als Ergebnis entweder true oder false zurück. Man bezeichnet so etwas auch als Boolschen Ausdruck. (Wir erinnern uns an den Datentyp boolean). Boolsche Ausdrücke können in der Programmierung sehr nützlich sein. Ich kann das Ergebnis eines komplizierten Vergleichs einfach in einer Variable vom Typ boolean speichern, indem ich das Ergebnis als WAHR(true) oder FALSCH(false) angebe.

Weitere nützliche Methoden sind:

  • Variable.length() gibt die Länge des Strings zurück
  • Variable.substring(int Start, int Ende) gibt den String zwischen Start und Ende zurück. Die beiden Variablen geben die Position des ersten und des letzten Buchstaben des Teils, der ausgeschnitten werden soll, wieder.
  • Variable.replace(char alt, char neu) ersetzt char alt durch char neu im String.
  • Variable.toLowerCase() wandelt alle Buchstaben in kleine Buschstaben um.
  • Variable.toUpperCase) wandelt alle Buchstaben in große Buchstaben um.
  • Variable.trim() entfernt führende oder folgende Leerzeichen aus dem String.

Als Schalker möchte ich die BVB Tasse nicht in meinen Ergebnissen haben. Also sollen alle Tassen ausgegeben werden, die NICHT die BVB Tasse sind. Anstatt der BVB Tasse soll noch einmal die Schalke-Tasse ausgegeben werden.

Wenn wir also unser Programm ändern wollen, damit der String "BVB" als Vergleichswert genommen wird, benutzen wir die Methode .equals("BVB").


                 [...]
                 // Kaffeetassen haben die Eigenschaften: Farbe, Höhe, Durchmesser, Henkel, Aufdruck
                 Kaffeetassen () {
                         Tassen[0] = new Tasse("Weiß", 10, 8, "Ja", "KIKISWEB");
                         Tassen[1] = new Tasse("Schwarz", 10, 8, "Ja", "JAVA");
                         Tassen[2] = new Tasse("Blau", 10, 8, "Ja", "SCHALKE");
                         Tassen[3] = new Tasse("Rot", 10, 8, "Ja", "BAYERN");
                         Tassen[4] = new Tasse("Gelb", 10, 8, "Nein", "BVB");

                         // Erst einmal eine Überschrift
                         System.out.println("Meine Kaffeetassen:");

                         // Dann die einzelnen Tassen ohne den BVB, stattdessen noch einmal Schalke.
                         for(int i = 0; i < 5; i++) {
                              if(Tassen[i].Aufdruck.equals("BVB")) {
                                         Tassen[2].ausgeben();
                                 }
                                 else {
                                         Tassen[i].ausgeben();
                                 }
                         }

                 // und den Konstruktor Kaffeetassen wieder schließen.
                 }

Um mein Ziel zu erreichen, habe ich nun auch die Fragestellung geändert. Mit .equals("BVB") Frage ich ab, ob der String in Aufdruck "BVB" ist oder nicht. Also wird alles ausgegeben, wo diese Bedingung nicht zutrifft. Einzig wenn der String gleich "BVB" ist wird die Schalke-Tasse ausgegeben.

Das ganze Programm "am Stück" gibt es hier.

OK, einfache Abfragen gehen jetzt. Aber was ist wenn wir mehrere Möglichkeiten haben.

Mit JAVA programmieren

Als Entwicklungsumgebung benutze ich NetBeans 7.

JAVA gibt es hier.