import algds.IOUtils;
/**
* Markov-Algorithmus als Klasse.
* @author ? (vielleicht Sattler)
* Verändert von Christian Semrau
*/
public class ChS_Markov {
// Ausgabe der Vergleiche bei verbose == true
boolean verbose = true;
// objektbezogene Markov-Tafel - sauberere Loesung, entspricht
// bald dem Wissensstand in der Vorlesung
int laenge; // Anzahl Zeilen
String[] phi; // zu ersetzen
String[] psi; // ersetzt durch
int[] i; // Sprung bei Erfolg
int[] j; // Sprung bei Misserfolg
/**
* Constructor nimmt Länge der Tafel.
* @param l Länge der Tafel
*/
public ChS_Markov(int l) {
laenge = l;
phi = new String[laenge];
psi = new String[laenge];
i = new int[laenge];
j = new int[laenge];
for (int k=0; k0)
System.out.println (index + "\t" + phi[index] + "\t" +
psi[index] +"\t" + i[index] +"\t" + j[index]);
}
/**
* Führt den Algorithmus aus.
* @param wort das Eingabewort
* @return das Ausgabewort
*/
public String lauf ( String wort ) {
int zeile = 0;
int position;
if(verbose)
System.out.println (" ");
while ( zeile >= 0 && zeile < laenge ) {
if (phi[zeile].length()==0) // leeres Suchwort extra behandeln
position=0;
else
// versagt, wenn wort und phi[zeile] beide leer sind!
position = wort.indexOf(phi[zeile]);
if(verbose){
System.out.print ("Z= " + zeile + "\tW=\"" + wort
+ "\"\t \""+phi[zeile]+"\"->\""+psi[zeile]+"\"");
};
if (position >= 0) {
// Suchwort enthalten
wort =
wort.substring(0,position)
+ psi[zeile]
+ wort.substring(position + phi[zeile].length());
zeile = i[zeile];
} else {
// Suchwort nicht enthalten
zeile = j[zeile];
};
if(verbose){
System.out.println (
"\tE=\"" + wort +"\"\t-> "+zeile);
}
};
if(verbose)
System.out.println (" ");
return wort;
}
/**
* Setzt eine Zeile des Algorithmus.
* @param z Zeile
* @param phi Was ersetzt werden soll
* @param psi Durch was es zu ersetzen ist
* @param i Sprungziel bei Erfolg
* @param j Sprungziel bei Misserfolg
*/
public void set(int z, String phi, String psi, int i, int j) {
this.phi[z] = phi;
this.psi[z] = psi;
this.i[z] = i;
this.j[z] = j;
}
}