q1:java-string_verarbeiung

Das folgende Listing zeigt die wesentlichen Teile der Lösung für das Bruchrechenprogramm (Kapitel 19 Aufgabe 6):

// Klasse Bruch Aufgabe 6 Kapitel 19
public class Bruch //eine Klasse für Bruch
{
   private long zaehler = 1 ;
   private long nenner = 1 ;    // Das sind die Attribute
     // das Schlüsselwort private verhindert, das von außen auf die Attribute
     // zugegriffen werden kann. Stichwort: Datenkapselung
   private long ggT (long a, long b)  // eine Hilfsmethode, die nicht außer-
    {                                 // halb verfügbar ist.
      long z ;
      while (b != 0)
      {
        z = a % b ;
        a = b ; b = z ;
      }
      return a ;
    }
   Bruch (long za, long ne)  // der Konstruktor
   {
     zaehler = za ; nenner = ne ;
   }
   public String ausgabe () // gibt einen Bruchstring zurück
   {
     String s = String.valueOf(zaehler) + "/" + String.valueOf(nenner) ;
     return s ;
   }
   public void einlesen (String eingabe) // liest einen String als Bruch in
                       // die Attribute ein
   {
      int mitte = eingabe.indexOf("/") ;
      String zaehlerString = eingabe.substring(0,mitte) ;
      String nennerString = eingabe.substring(mitte+1,eingabe.length()) ;
      zaehler = Long.parseLong(zaehlerString) ;
      nenner = Long.parseLong(nennerString) ;
   }
   public long gibZaehler ()
   {
     return zaehler ;
   }
   public long gibNenner ()
   {
     return nenner ;
   }
public void erweitere (long k)
   {
     zaehler *= k ;
     nenner *= k ;
   }
   public void kuerze ()
   {
     long teiler = ggT(zaehler,nenner) ;
     zaehler /= teiler ;
     nenner /= teiler ;
     if (nenner < 0)
     {
       this.erweitere(-1) ;
     }
   }
   void mult(Bruch b)
   {
     zaehler *= b.gibZaehler() ;
     nenner *= b.gibNenner() ;
     this.kuerze() ;
   }
   void divi(Bruch b)
   {
     zaehler *= b.gibNenner() ;
     nenner *= b.gibZaehler() ;
     this.kuerze() ;
   }
   void addi (Bruch b)
   {
     long kgv = nenner*b.gibNenner()/ggT(nenner,b.gibNenner()) ;
     zaehler = zaehler*kgv/nenner + b.gibZaehler()*kgv/b.gibNenner() ;
     nenner = kgv ;
     this.kuerze() ;
   }
   void subt (Bruch b)
   {
     long kgv = nenner*b.gibNenner()/ggT(nenner,b.gibNenner()) ;
     zaehler = zaehler*kgv/nenner - b.gibZaehler()*kgv/b.gibNenner() ;
     nenner = kgv ;
     this.kuerze() ;
   }
}
 // Anfang Methodenaus bruchrechner
  public void jButton1_ActionPerformed(ActionEvent evt) {
    Bruch bruch1 = new Bruch(1,1) ;
    Bruch bruch2 = new Bruch(1,1) ;
    bruch1.einlesen(jTextField1.getText()) ;
    bruch2.einlesen(jTextField2.getText()) ;
    bruch1.addi(bruch2) ;
    jTextField3.setText(bruch1.ausgabe()) ;
  }

Uns interessiert hier vor allem das Umwandeln des Bruchstrings in der Form „3/5“ in die zwei long-Zahlen für Zähler und Nenner, da hier einige wichtige Methoden zur Stringbearbeitung verwendet werden. Hier eine Übersicht:

String string1 ;
String string2 ; //erzeugt zwei instanzen vom Typ string

string1.String() erzeugt einen Leerstring als string 1

string1.String(string2) Als string1 wird eine Kopie von string2 angelegt

string1.String(zeichenfeld) Der String1 wird aus einem Zeichenfeld erzeugt, also einer Variablem vom Typ char[]

string2 = string1.substring(beginn, ende) Dabei wird aus dem string1 ein Teilstring herausgelesen und in string 2 gespeichert. Die beiden int-Variablen begin und end geben Anfangs- und Endposition des Teilstrings im eigentlichen String an. Dabei werden die Zeichen von 0 ab gezählt. End ist die Position des ersten Zeichens hinter dem Teilstring. string2 = string1.substring(0, 3) ergibt den Teilstring der Zeichen 0 bis 2, also der ersten 3 Zeichen.

int laenge =string1.length() gibt die Länge eines Strings zurück. Wie bei Feldern haben bei einem String der Länge 5 die Zeichen die Indizes (Hausnummern) 0 bis 4.

int pos = string1.indexOf(“ab“) ; sucht nach dem ersten Vorkommen des Teilstrings “ab“ in string1 und gibt dessen Position zurück. Der Parameter kann natürlich auch eine Stringvariable sein.

string1.toLowerCase() ; string1.toUpperCase wandelt alle Zeichen eines Strings in Klein- bzw. Großbuchstaben um. Nicht wandelbare Zeichen wie Ziffern oder Satzzeichen bleiben erhalten.

string1.replace(‘a‘,‘z‘) ersetzt alle a’s im String durch z’s. Als Parameter sind natürlich auch char-Variablen erlaubt.

boolean test = string1.equals(string2) überprüft zwei Strings auf Gleichheit. Es gibt noch die Methode equalsIgnoreCase, die zusätzlich Unterschiede in Groß- und Kleinschreibung ignoriert.

  • /var/www/infowiki/data/pages/q1/java-string_verarbeiung.txt
  • Zuletzt geändert: 2017/07/12 20:33
  • von admin03