Ergebnis 1 bis 11 von 11

Thema: Java - Einen Beitrag aus einem String Filtern...

  1. #1

    Java - Einen Beitrag aus einem String Filtern...

    Hallo Leute!

    Ich habe ein Problem und ich hoffe ihr könnt mir helfen. (Java)

    Ich habe eine Datei mit folgenden Inhalt in einem String geladen:

    Zitat Zitat
    ---------
    Herb (Uhrzeit) Thema 1
    Hier ist der Erste
    mehrzeilige Eintrag.
    Bla bla bla
    --------
    Herb (Uhrzeit) Thema 2
    Hier ist ein zweiter Eintrag...
    Xyz und so weiter...
    -------
    ...
    Ich möchte jetzt ein kleines Programm schreiben, mit dem ich nach einem Wort suchen kann,
    und danach soll der dazugehörige Eintrag in einen Neuen String gespeichert werden.
    Als Beispiel, würde ich jetzt in der oben beschriebenen Datei nach "Xyz" suchen wollen und dann soll der gesamte Eintrag, also:

    Zitat Zitat
    --------
    Herb (Uhrzeit) Thema 2
    Hier ist ein zweiter Eintrag...
    Xyz und so weiter...
    -------
    angezeigt werden.
    Ich habe leider keine Idee wie ich das anstellen könnte. Bisher hab ich auch nur herausgefunden,
    wie vorkommende Wörter zählen kann... Habt ihr eine Idee?
    Ich würde mich über Antworten freuen.

    Euer Herb

  2. #2
    Also dass du mit indexOf() einen String suchen kannst, weißt du wohl schon. Dann würde ich folgendes vorschlagen (text ist der gesamte String mit allen Beiträgen, search der Suchstring):
    Code (Java):
    private static final DIVIDER = "---------";
     
    public static String getSectionWith(String text, String search) {
        int pos = text.indexOf(search);
        if (pos < 0) {
            return null;
        }
        int begin = text.lastIndexOf(DIVIDER, pos);
        int end = text.indexOf(DIVIDER, pos);
        return text.substring(begin, end + DIVIDER.length());
    }

    Funktioniert natürlich nur, wenn die Trennzeichen (also die Zeile mit Bindestrichen) immer gleich lang ist, und man davon ausgeht, dass sie nie innerhalb eines Beitrags vorkommt (aber Zweiteres ist bei dem System natürlich sowieso so – Ersteres könnte man mit Regular Expressions umgehen).

  3. #3
    Vielen Dank drunken monkey!

    Das hört sich nach was brauch barem an!
    Leider hab ich noch nicht bekommen das irgentwie immer noch nicht hin...
    Vllt hast du oder jemand anderes noch Lust mir weiter zu helfen..

    Hier ist mein Code zum einlesen der Textdatein in den String.

    Code:
     private void Textanzeigen(){
    	    StringBuffer buf = new StringBuffer();
    	        try {
    	            BufferedReader reader = new BufferedReader(new FileReader(pathzeile.getText()));
    	            String line = "";
    	            while((line = reader.readLine( )) != null){
    	                buf.append(line+"\n");
    	                
    	            }
    	            reader.close( );
    	        }
    	        catch (FileNotFoundException e) {
    	            e.printStackTrace( );
    	        }
    	        catch (IOException e) {
    	            e.printStackTrace( );
    	        }
    	        
    	    
    	    String gesamtlog = buf.toString();
    	    ausgabefeld.setText(gesamtlog);
    
    	}
    Muss ich nicht deinen Teil hier mit einbinden?

    Ich hoffe du kannst mir helfen...
    Annsonsten schon mal vielen Dank für den ersten Teil

    Herb

  4. #4
    Zitat Zitat von Herb Beitrag anzeigen
    Muss ich nicht deinen Teil hier mit einbinden?
    Je nachdem, was du willst. Wenn du schlussendlich in ausgabefeld nur den einen Beitrag mit dem Treffer anzeigen willst, dann ja. Dann könnte der Code z.B. so aussehen:
    Code (Java):
    	private void Textanzeigen(){
    	    StringBuffer buf = new StringBuffer();
    	        try {
    	            BufferedReader reader = new BufferedReader(new FileReader(pathzeile.getText()));
    	            String line = "";
    	            while((line = reader.readLine( )) != null){
    	                buf.append(line+"\n");
     
    	            }
    	            reader.close( );
    	        }
    	        catch (FileNotFoundException e) {
    	            e.printStackTrace( );
    	        }
    	        catch (IOException e) {
    	            e.printStackTrace( );
    	        }
     
     
    	    String gesamtlog = getSectionWith(buf.toString(), SEARCH_STRING);
    	    if (gesamtlog != null) {
    	        ausgabefeld.setText(gesamtlog);
    	    }
    	    else {
    	        ausgabefeld.setText("Kein Treffer gefunden.");
    	    }
    	}
     
    private static final DIVIDER = "---------";
     
    private static String getSectionWith(String text, String search) {
        int pos = text.indexOf(search);
        if (pos < 0) {
            return null;
        }
        int begin = text.lastIndexOf(DIVIDER, pos);
        int end = text.indexOf(DIVIDER, pos);
        return text.substring(begin, end + DIVIDER.length());
    }

    WObei du SEARCH_STRING natürlich noch durch den String ersetzen musst, nach dem du suchen willst. Weiß ja nicht, wo du den herbekommst …

  5. #5

    Java - Einen Beitrag aus einem String filtern...

    Hay ja! Nachdem ich(, oder eher Eclipse) das alles, ein bisschen an den Rest angepasst hat,
    funktioniert es endlich! Also Vielen Dank, drunken monkey!

    Ich habe da solang drangesessen^^

    Leider hört der Code beim ersten Treffer auf.. Ich suche momentan noch eine Lösung, wie ich den Code erweitere, bis er alle Beiträge anzeigt, die den Inhalt vom "SEARCH_STRING" tragen...

  6. #6
    Zitat Zitat von Herb Beitrag anzeigen
    Leider hört der Code beim ersten Treffer auf.. Ich suche momentan noch eine Lösung, wie ich den Code erweitere, bis er alle Beiträge anzeigt, die den Inhalt vom "SEARCH_STRING" tragen...
    Also damit aus dem:
    Code:
    ---------
    Herb (Uhrzeit) Thema 1
    Hier ist der Erste
    mehrzeilige Eintrag.
    Bla bla bla
    ---------
    Herb (Uhrzeit) Thema 2
    Hier ist ein zweiter Eintrag...
    Xyz und so weiter...
    ---------
    Herb (Uhrzeit) Thema 3
    Foo bar baz bla blubb
    ---------
    Herb (Uhrzeit) Thema 4
    Schupp dipp du Xyz
    ---------
    das:
    Code:
    ---------
    Herb (Uhrzeit) Thema 2
    Hier ist ein zweiter Eintrag...
    Xyz und so weiter...
    ---------
    Herb (Uhrzeit) Thema 4
    Schupp dipp du Xyz
    ---------
    wird?

    Das ginge wahrscheinlich so:
    Code (Java):
    private static final DIVIDER = "---------";
     
    public static String getSectionWith(String text, String search) {
        StringBuilder ret = new StringBuilder();
        int pos;
        while ((pos = text.indexOf(search)) >= 0) {
            int begin = text.lastIndexOf(DIVIDER, pos);
            int end = text.indexOf(DIVIDER, pos);
            ret.append(text.substring(begin, end));
            text = text.substring(end);
        }
        return ret.isEmpty() ? null : ret.append(DIVIDER).toString();
    }

  7. #7

    Vielen Dank!

    Ja, wieder angepasst und und es läuft!

    Vielen vielen Dank!
    Du hast mir ein ganzes Stück weiter geholfen! Ich denke nun komme ich
    wieder alleine klar!

    Herb

  8. #8
    Hast du die Möglichkeit das Format der Datei selber zu bestimmen? Dann wäre XML vielleicht eine bessere Alternative. Hat einen weitreichenderen Support und wenn du deine Datenstruktur mal erweitern möchtest, dann ist das auch einfacher.

  9. #9
    Nein leider habe ich nicht die Möglichkeit, das Format anzupassen, das es noch von anderen Programmen gelesen wird...

    Aber wie meinst du das mit Datenstrucktur erweitern? Ich könnte doch einfach den gesamten Text einlesen lassen und dann bei bedarf Teilstrings anhängen... und den gesammten String wieder in die Datei abspeichern. Meinstest du so etwas?

  10. #10
    Nun, da du ja keinen Einfluss auf das Dateiformat hast ist das alles natürlich nur rein hypothetisch.

    Du hast also eine Datei mit mehreren Textblöcken die durch die Zeichenkette "---------" getrennt sind. Gefolgt von einer Zeile die bestimmte Metainformationen beinhaltet (Autor, Zeit, Titel). Dieses Format ist relativ starr.
    Wenn du nun in Zukunft andere Informationen auch noch hinzufügen möchtest, wie zum Beispiel Tags nach denen man suchen möchte, dann musst du auch gleich deine ganze Parserlogik ändern (und alle anderen Programme die diese Datei verwenden wollen gleich mit, da sie die neuen Metainformationen dann wohl entweder als Teil des Titels oder des Textes betrachten).

    Wandeln wir das Beispiel nun in XML um.
    Code:
    <entries>
      <entry>
        <topic>Thema 1</topic>
        <author>Herb</topic>
        <date>(Uhrzeit)</date>
        <text>
          Hier ist der Erste
          mehrzeilige Eintrag.
          Bla bla bla
        </text>
        <entry>
           ....
        </entry>
         ....
      </entry>
    </entries>
    Das sieht natürlich auf den ersten Blick sehr schwierig zu parsen aus, aber dafür gibt es Standardfunktionen in Java. Mit diesen Funktionen ist es dir quasi möglich das Dokument nach den Daten zu durchsuchen die du haben möchtest. Das schöne daran ist, dass wenn du neue Metainformationen hinzufügst werden andere Programme die bisher nicht nach ihnen suchen sie auch gar nicht mitbekommen.

    Wie gesagt, wenn du das Dateiformat sowieso nicht bestimmen kannst, dann ist diese Überlegung sowieso hinfällig.

  11. #11
    Dein Gott hat Datenbanken erfunden.

    Zitat Zitat von The_Burrito Beitrag anzeigen
    Nun, da du ja keinen Einfluss auf das Dateiformat hast ist das alles natürlich nur rein hypothetisch.

    Du hast also eine Datei mit mehreren Textblöcken die durch die Zeichenkette "---------" getrennt sind. Gefolgt von einer Zeile die bestimmte Metainformationen beinhaltet (Autor, Zeit, Titel). Dieses Format ist relativ starr.
    Wenn du nun in Zukunft andere Informationen auch noch hinzufügen möchtest, wie zum Beispiel Tags nach denen man suchen möchte, dann musst du auch gleich deine ganze Parserlogik ändern (und alle anderen Programme die diese Datei verwenden wollen gleich mit, da sie die neuen Metainformationen dann wohl entweder als Teil des Titels oder des Textes betrachten).

    Wandeln wir das Beispiel nun in XML um.
    Code:
    <entries>
      <entry>
        <topic>Thema 1</topic>
        <author>Herb</topic>
        <date>(Uhrzeit)</date>
        <text>
          Hier ist der Erste
          mehrzeilige Eintrag.
          Bla bla bla
        </text>
        <entry>
           ....
        </entry>
         ....
      </entry>
    </entries>
    Das sieht natürlich auf den ersten Blick sehr schwierig zu parsen aus, aber dafür gibt es Standardfunktionen in Java. Mit diesen Funktionen ist es dir quasi möglich das Dokument nach den Daten zu durchsuchen die du haben möchtest. Das schöne daran ist, dass wenn du neue Metainformationen hinzufügst werden andere Programme die bisher nicht nach ihnen suchen sie auch gar nicht mitbekommen.

    Wie gesagt, wenn du das Dateiformat sowieso nicht bestimmen kannst, dann ist diese Überlegung sowieso hinfällig.

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •