// Datei: Telefonbuch.java
// Autor: Brecht
// Datum: 23.07.2018
// Thema: Das Telefonbuch enthält zentral eine ArrayList
// namens tBuch aus Strings der Form "Name&Nummer".
//
// Dazu gehören die beiden Methoden tBuchSuche() und
// tBuchAbfrage() sowie zwei ArrayLists namens suErgNa
// und suErgNu für die gefundenen Suchergebnisse.
//
// Eine Beschreibung der Arbeitsweise beider Methoden
// findet sich im Grobentwurf des Lösungsbeispiels
// zur Aufgabe 1.
// =============================================================
import java.util.*;
class Telefonbuch {
ArrayList<String> tBuch = new ArrayList<String>();
ArrayList<String> suErgNa = new ArrayList<String>();
ArrayList<String> suErgNu = new ArrayList<String>();
// tBuch mit einigen Einträgen belegen
// -----------------------------------------------------------
Telefonbuch() {
tBuch.add( "Meier&4711" );
tBuch.add( "von Ulm&4815" );
tBuch.add( "Müller&4711" );
tBuch.add( "Meier&4816" );
tBuch.add( "Schmitt&4712" );
tBuch.add( "Meier&4713" );
tBuch.add( "Huber&4711" );
}
// Suche im Telefonbuch
// -----------------------------------------------------------
ArrayList<String> tBuchSuche(String pkqs) {
ArrayList<String> treffer = new ArrayList<String>();
int len = tBuch.size();
String zeile = null;
for(int i=0; i<len; i++) {
zeile = tBuch.get(i);
if(pkqs.endsWith("&")) {
if(zeile.startsWith(pkqs)) treffer.add(zeile);
}
else {
if(zeile.endsWith(pkqs)) treffer.add(zeile);
}
}
return treffer;
} // basisSuche()
// Nebenläufige Suche mit Threads, die tBuchSuche()
// ausführen
// Parameter ist ein korrekt aufgebauter Query String
// -----------------------------------------------------------
ArrayList<String> tBuchAbfrage(String kqs)
throws Exception {
// SuchThreads als lokale Klasse
// ---------------------------------------------------------
class SuchThread extends Thread {
String pkqs = null;
SuchThread(String pkqs) { this.pkqs = pkqs; }
public void run() {
if(pkqs.endsWith("&")) {
Telefonbuch.this.suErgNa =
Telefonbuch.this.tBuchSuche(pkqs);
}
else {
Telefonbuch.this.suErgNu =
Telefonbuch.this.tBuchSuche(pkqs);
}
}
} // local class
// Query String hat die Form: *& oder &* oder *&*
// ---------------------------------------------------------
String name = null;
String nummer = null;
if(kqs.endsWith("&")) {
SuchThread st = new SuchThread(kqs);
st.start();
st.join();
return suErgNa;
}
if(kqs.startsWith("&")) {
SuchThread st = new SuchThread(kqs);
st.start();
st.join();
return suErgNu;
}
String[] token = kqs.split("&");
name = token[0]+"&";
nummer = "&" + token[1];
SuchThread st1 = new SuchThread(name);
SuchThread st2 = new SuchThread(nummer);
st1.start();
st2.start();
st1.join();
st2.join();
int len = suErgNu.size();
for(int i=0; i<len; i++) suErgNa.add(suErgNu.get(i));
return suErgNa;
} // tBuchAbfrage()
} // class