Strings und Zahlen (3)

Strings unter der Lupe

Sie kennen bereits die Methode equals(), mit der man zwei Strings auf Gleichheit testen kann. In der Tabelle finden Sie weitere nützliche Methoden der Klasse String. In der Methodenklammer steht, welches Argument oder welche Argumente man der Methode übergeben muss, hinter dem Doppelpunkt steht der Typ des Ergebnisses:

String1.equals(String2) : boolean testet String1 auf Gleichheit mit String2
String1.compareTo(String2) : integer liefert Zahl größer 0 falls String1 alphabetisch vor String2 kommt,
liefert null, wenn Strings gleich und
Zahl größer 0 falls String2 alphabetisch vor String1 kommt.
String1.contains(String2) : boolean testet, ob String2 in String1 enthalten ist
String.replace(char1 ,char2) : String ersetzt jedes Vorkommen von Zeichen 1 im String durch Zeichen 2
String.length() : integer Ermittelt, wie viel Zeichen der String enthält
String.indexOf(char) : integer Ermittelt die erste Position eines Zeichens (Die Zählung startet mit 0)
String.charAt(integer): char Gibt das Zeichen an der angegebenen Stelle aus. (Die Zählung startet mit 0)

Hier ein Beispielprogramm:


import java.util.*;
public class ZahlZerlegen {
  public static void main(String[] args) {
    System.out.println("Wir schlachten eine Zahl");
    Scanner Eingabe = new Scanner(System.in);
    System.out.print("\nGib bitte eine Zahl ein: ");
    String antwort = Eingabe.next();
    if (antwort.equals("Zahl")) {
      System.out.println("Du sollst nicht \"Zahl\" eingeben");   // Ist Antwort das Wort "Zahl"?
    }
    if (antwort.contains(",")) {                                 // Ist String in Antwort enthalten?
      antwort = antwort.replace(',','.');                        // Ersetze Zeichen durch anderes
    }
    try {
      double zahl = Double.parseDouble(antwort);
    } catch (Exception e) {
      System.out.println("Deine Eingabe kann ich nicht verarbeiten");
      return;
    }
    int l = antwort.length();                                     // Ermittle Länge des Strings
    System.out.format("Deine Zahl hat insgesamt %2d Stellen.\n",l);
    int p = antwort.indexOf('.');                                 // Ermittle Position eines Zeichens
    int ns = l-p-1;
    if (ns>1) {
      System.out.format("Davon sind %2d Nachkommastellen.\n",ns);
      System.out.println("Die Einerstelle ist "+antwort.charAt(p-1)); // Ermittle Zeichen an Position
    } else {
      System.out.println("Die Einerstelle ist "+antwort.charAt(l-1)); // Ermittle Zeichen an Position
    }
  }
}


Und hier das Ergebnis:       . Testen Sie weitere Varianten.

Zeichen mit Chamäleon-Charakter

Vielleicht ist es Ihnen aufgefallen: Es gibt einen Unterschied zwischen ',' und ","  .
Ersteres betrachtet Java als einzelnes Zeichen, letzteres als einen String, der zufällig nur aus einem einzigen Zeichen besteht.

Für einzelne Zeichen besitzt Java den speziellen Variablentyp char. Zeichen

Da alle Zeichen des Computerzeichensatzes genormt und durchnummeriert sind, kann ein Zeichen sowohl die Eigenschaften von Buchstaben als auch von Zahlen annehmen. Das wird besonders verwirrend im Zusammenhang mit dem Operator +, der im Falle von Zahlen eine Addition, im Falle von Strings aber eine Verkettung (Aneinanderhängen) bewirkt.

Wenn Sie die Ergebnisse des folgenden Programms vorhersagen können, sind Sie schon recht Java-fit:


public class Charactertest {
    public static void main(String[] args) {
    System.out.println('3'==3);                // Drucke ob true oder false
    System.out.println("3".equals('3'));       // Drucke ob true oder false
    System.out.println("3".equals(3));         // Drucke ob true oder false
    System.out.println((char)50);              // Drucke das Zeichen mit der Nummer 50
    System.out.println((int) '3');             // Drucke die Nummer des Zeichens '3'
    System.out.println("3"+"2");               // Drucke zwei verkettete Strings
    System.out.println("3"+'2');               // Drucke einen String mit angehängtem Zeichen
    System.out.println('3'+'2');               // ???
    System.out.println("3"+2);                 // ???
    System.out.println(3+2);                   // ???
    System.out.println('3'+2);                 // ???
  }
}


Aufgaben

  1. Schreiben Sie ein Programm, das zur Eingabe einer Postleitzahl auffordert und den eingegebenen String in der Variablen plz speichert. Wenn die eingegebene Zahl nicht fünfstellig ist (plz.length() < 5), dann soll sie zurückgewiesen werden.
    Ansonsten soll mithilfe von plz.charAt(0) das erste Zeichen ermittelt werden und ausgegeben werden: "Der Ort liegt im Bereich Leipzig" [Berlin, Hamburg, Hannover, Düsseldorf, Köln, Frankfurt, Stuttgart, München, Nürnberg].
  2. Für Leute mit viel Ehrgeiz: Bearbeiten Sie Aufgabe 1, nur mit zweistelligen Zonen. Die Zonen stehen in der Wikipedia.
  3. Schreiben Sie ein Programm, das aus einem per Scanner erfragten String Geburtsdatum (vorgegebene Form tt.mm.jjjj) mithilfe der Methode Geburtsdatum.substring(3,5) den Monat herausgreift, den String mithilfe Integer.parseInt() in eine Integerzahl übersetzt und dann das ganze Datum mithilfe einer switch-Struktur in ein Datum der Form tt. Monatsname jjjj verwandelt.