# Boyer-Moore Algorithmus implementieren



## Goldini50 (24. Mrz 2016)

Hi, ich habe die Aufgabe bekommen den oben genannten Algorithmus zu implementieren. Dabei bin ich allerdings mittlerweile am verzweifeln. Ich bin allerdings schon so weit das ich den eigentlichen Algorithmus am Beispiel von Wikipedia soweit verstanden habe. 

Mein bisheriger Code :

```
public class BoyerMoore {

 public static void main(String[] args) {
  String text = "Hoola-Hoola girls like Hooligans;";
  String suchmuster = "Hooligan";
  int lastIndexSuche = suchmuster.length() - 1;
  int vergleichsIndex = suchmuster.length() - 1;
  int characterErraten = 0;
  int indexRichtigerBuchstabe = 0;
  int neuerVergleichsindex;
  char[] zwischenspeicherDesChars = new char[1];
  int[] zwischenspeicherDesIndex = new int[1];

  for (int i = lastIndexSuche; i >= 0; i--) {
   if (suchmuster.charAt(i) == text.charAt(vergleichsIndex) && i == suchmuster.length() - 1) { //Wenn von anfang an alles stimmt bis zum schluss wird das wort sofort gefunden
    System.out.println(suchmuster.charAt(i));
    System.out.println(suchmuster.charAt(vergleichsIndex));
    vergleichsIndex--;
    characterErraten++;
   }

   if (suchmuster.charAt(i) != text.charAt(vergleichsIndex)) { //Falls er oben rausspringt wird der vergleichsindex wieder auf den letzten buchstaben gesetzt
    vergleichsIndex = suchmuster.length() - 1;
   }

   if (suchmuster.charAt(i) != text.charAt(i) && i < 1) { // Wenn der letzte buchstabe nicht demselben entspricht wie im patter, spring raus
    break;
   }

   if (suchmuster.charAt(i) == text.charAt(vergleichsIndex)) {
    zwischenspeicherDesChars[0] = suchmuster.charAt(i); // o
    zwischenspeicherDesIndex[0] = i; // 2
    System.out.println(zwischenspeicherDesIndex[0]);
    System.out.println(zwischenspeicherDesChars[0]);
    indexRichtigerBuchstabe = i;
    break;
   }
  }

  if (characterErraten == suchmuster.length()) { // ZIEL
   System.out.println("Matched");
   System.exit(0);
  }
  neuerVergleichsindex = vergleichsIndex - indexRichtigerBuchstabe + vergleichsIndex;
 }
}
```
So wie er jetzt ist, ist er kompilierbar gibt allerdings nur den Index und den char aus an dem der Text mit dem Pattern übereinstimmt, nun müsste ih theoretisch das pattern verschieben und das ist das Problem.
So wie er jetzt ist , ist er allerdings sehr statisch und quasi nur auf das im code  genannte Beispiel
(text = *beispiel*) ausgelegt. Je mehr ich versuche meinen code zu verstehen desto mehr versau ich ihn  Ich bin mir sicher das es eine Möglichkeit gibt das viel kürzer, hübscher und verständlicher zu implementieren .

Und bevor die Frage kommt - Nein , ich werde nicht irgendeinen fertig geschriebenen Algorithmus verwenden. 

Danke...


----------

