Wortfilter - Rekursionsproblem

flyandshot

Grünschnabel
Hallo liebe Tutorials JavaCommunity,

ich bin gerade dabei ein Programm zu schreiben, welches in einem eingegebenen Text nach Wörtern sucht.
Dabei wird, wenn ein Wort in dem Text gefunden wird, dieses herausgelöscht. Ist der Text dann noch länger als vorgegebene Länge, wird der Filter genau noch einmal (also rekursiv) mit dem bearbeiteten Text aufgerufen.
Die Vergleichswörter werden aus einer Liste ausgelesen.
Das Problem ist, dass das Programm ab einem bestimmten Punkt die bearbeiteten Text nicht mehr kürzt, sondern irgendwie aneinander hängt.


Hier mal der gesamte Code


Code:
import java.io.*;
import java.io.RandomAccessFile;
import java.util.*;


public class rekurs2 {
   static int restlänge = 12;
   static String [] checkl = new String [1500000];
   static int wtc = 50; //Wörter in der Wortliste
   static int ebtief = 0;


  public static void main(String[] args) {
    String lösungtxt;

     wortliste();

    lösungtxt = "derbaueristvielleichtschlauabernichtunbedingtdennerweißnichtalle";

    minimizer(lösungtxt);



  }
  
  
  private static void wortliste() {
  String tchange; // Einlese Variable


  //*****************Einlesen der Wortliste in ein Array**********************
    try
    {

     FileReader fr2 = new FileReader("Top.txt");
     BufferedReader br2 = new BufferedReader(fr2);

      for (int o =0 ; o <= wtc ; o++ ) {
        tchange = br2.readLine();
        checkl[o] = tchange.toLowerCase();

      }

     br2.close();
    }  catch ( IOException e ) {e.printStackTrace();}


  }
  
  
  
  private static void minimizer (String text){
      int endstel = 0;
      int stelle = 0;
      String bearb = text;
      String ausgabe = "";
      String wort = "";




      for (int z = 0; z < wtc; z++){


              wort = checkl[z]; // Definition des zu suchenden Wortes


              if (bearb.contains(wort.toLowerCase())) {

                 stelle = bearb.indexOf(wort.toLowerCase());  // Anfangsstelle des Wortes im Text feststellen
                 endstel = stelle + wort.length();          // Endstelle des Wortes im Text feststellen


              //Ausgabe bis zum Anfang des Wortes
                     for (int i = 0; i < stelle;i++)
                     {
                       ausgabe = ausgabe + bearb.charAt(i);
                     }


              //Ausgabe nach dem Wort bis Ende des Textes
                     for (int i = endstel; i < bearb.length();i++)
                     {
                       ausgabe = ausgabe + bearb.charAt(i);
                     }



                if (ausgabe.length() > restlänge)
                {
                   minimizer(ausgabe);
                }else {
                 System.out.println(bearb+ " @ "  + z);
                }


              }

      }





  }
}


Eine (oder mehrere) Antworten wären super Ich steh grad ziemlich auf dem Schlauch^^

Grüße flynshot
 
Hi,

Möglichkeit 1:
Du kannst dir mithilfe von 'string.subString(int start, int end)' den Text vor dem Wort und nach dem Wort geben lassen. Dann brauchst du nicht die chars selber aneinander hängen.

Möglichkeit 2:
Wenn du das Ergebnis aber auch ohne Rekursion lösen darfst, würde ich dir die Methode 'string.replaceFirst(String regex, String replacement)' dann kannst du einfach nach deinem Wort x mal suchen und durch einen Leerstring ersetzen.

Gruß

Fabio
 
Zurück