Sortieren nach Stellenangaben

MiMa

Top Contributor
Derzeit beschäftige ich mich mit dem sortieren von Stichworten in einem Text.
1. Es wird ein Text eingelesen (Textinhalt) der Inhalt ist ein Schriftverkehr.
2. Es wird eine Stichwortliste eingelesen (KontaktNamen.txt)
Ein Schriftverkehr hat einen Absender und einen Empfänger.
Ich möchte den Absender und den Empfänger automatisch ermitteln lassen, indem ich vergleiche wer an welcher Stelle steht. Der Absender ist an erster Stelle zu finden und der Empfänger an zweiter Stelle.
Ich vergleiche in meinem Code ob der Absender vor dem Empfänger im Text kommt. Wenn ja dann wird der Empfänger übschrieben, wenn nicht, bleibt der Wert. In einer Schleife werden die Absender ständig mit neuen gefundenen Stichworten belegt.
Leider habe ich in der Schleife irgendwo ein Problem, da sich diese scheinbar unnötig wiederholt.
Das Endergebnis ist dann leider auch nicht korrekt, obwohl im Log scheinbar simmen sollte?

Java:
FileReader stichwortLeser = new FileReader(datei.getPfadStichworte() + "/KontaktNamen.txt");
        BufferedReader stichwortListe = new BufferedReader(stichwortLeser);

        // Schleife zum Einlesen der S
        IndexLogger.info("***   Abender und Empfaenger suchen   ***");
        while ((stichwort = stichwortListe.readLine()) != null) {
            if (datei.getDateiInhalt().contains(stichwort)) {
                kontaktA = stichwort;
                kontaktStelleA = datei.getDateiInhalt().indexOf(stichwort);
                IndexLogger.info("Stichwort " + stichwort + " wird Absender von Stelle " + kontaktStelleA +" zugewiesen");
                if (kontaktE == "") {
                    kontaktE = kontaktA;
                    kontaktStelleE = kontaktStelleA;
                    IndexLogger.info("Der Empfaenger ist leer, " + kontaktE + " wird von Stelle " + kontaktStelleE + " zugewiesen");
                } // if
            } // if
            if (kontaktStelleA < kontaktStelleE) {
                kontakt.setAbsender(kontaktA);
                kontakt.setEmpfaenger(kontaktE);
                IndexLogger.info("Empfaenger ist VOR DEM Absender");
                IndexLogger.info("Der Absender ist   : " + kontakt.getAbsender() + " von Stelle " + kontaktStelleA);
                IndexLogger.info("Der Empfaenger ist : " + kontakt.getEmpfaenger() + " von Stelle " + kontaktStelleE);
            }
            else {
                kontakt.setAbsender(kontaktE);
                kontakt.setEmpfaenger(kontaktA);
            } // if
        } // ende Schleife zum Einlesen der Stichworte

        // Schliessen des Readers
        stichwortListe.close();
        System.out.println("Der Absender ist : " + kontakt.getAbsender());
        System.out.println("Der Empfänger ist : " + kontakt.getEmpfaenger());
Ausgabe Log
Code:
***   Abender und Empfaenger suchen   ***
Stichwort Toni wird Absender von Stelle 454 zugewiesen
Der Empfaenger ist leer, Toni wird von Stelle 454 zugewiesen
Stichwort Mareike wird Absender von Stelle 2534 zugewiesen
Stichwort Ella wird Absender von Stelle 107 zugewiesen
Empfaenger ist VOR DEM Absender
Der Absender ist   : Ella von Stelle 107
Der Empfaenger ist : Toni von Stelle 454
Empfaenger ist VOR DEM Absender
Der Absender ist   : Ella von Stelle 107
Der Empfaenger ist : Toni von Stelle 454
Empfaenger ist VOR DEM Absender
Der Absender ist   : Ella von Stelle 107
Der Empfaenger ist : Toni von Stelle 454
Empfaenger ist VOR DEM Absender
Der Absender ist   : Ella von Stelle 107
Der Empfaenger ist : Toni von Stelle 454
Empfaenger ist VOR DEM Absender
Der Absender ist   : Ella von Stelle 107
Der Empfaenger ist : Toni von Stelle 454
Empfaenger ist VOR DEM Absender
Der Absender ist   : Ella von Stelle 107
Der Empfaenger ist : Toni von Stelle 454
Empfaenger ist VOR DEM Absender
Der Absender ist   : Ella von Stelle 107
Der Empfaenger ist : Toni von Stelle 454
Empfaenger ist VOR DEM Absender
Der Absender ist   : Ella von Stelle 107
Der Empfaenger ist : Toni von Stelle 454
Empfaenger ist VOR DEM Absender
Der Absender ist   : Ella von Stelle 107
Der Empfaenger ist : Toni von Stelle 454
Empfaenger ist VOR DEM Absender
Der Absender ist   : Ella von Stelle 107
Der Empfaenger ist : Toni von Stelle 454
Empfaenger ist VOR DEM Absender
Der Absender ist   : Ella von Stelle 107
Der Empfaenger ist : Toni von Stelle 454
Empfaenger ist VOR DEM Absender
Der Absender ist   : Ella von Stelle 107
Der Empfaenger ist : Toni von Stelle 454
Empfaenger ist VOR DEM Absender
Der Absender ist   : Ella von Stelle 107
Der Empfaenger ist : Toni von Stelle 454
Empfaenger ist VOR DEM Absender
Der Absender ist   : Ella von Stelle 107
Der Empfaenger ist : Toni von Stelle 454
Empfaenger ist VOR DEM Absender
Der Absender ist   : Ella von Stelle 107
Der Empfaenger ist : Toni von Stelle 454
Empfaenger ist VOR DEM Absender
Der Absender ist   : Ella von Stelle 107
Der Empfaenger ist : Toni von Stelle 454
Empfaenger ist VOR DEM Absender
Der Absender ist   : Ella von Stelle 107
Der Empfaenger ist : Toni von Stelle 454
Empfaenger ist VOR DEM Absender
Der Absender ist   : Ella von Stelle 107
Der Empfaenger ist : Toni von Stelle 454
Stichwort Mareike wird Absender von Stelle 2534 zugewiesen
Stichwort Toni wird Absender von Stelle 454 zugewiesen
Der Absender ist : Toni
Der Empfänger ist : Toni
Ich würde mich über einen Tipp freuen.
Danke M.
 

JStein52

Top Contributor
Wieviel einfacher wäre die Welt wenn der Compiler bei solchen Konstrukten eine Warning ("Do you really mean ==")
rauswerfen würde. Nicht abschaltbar !!
 

MiMa

Top Contributor
Vielen Dank,
kontakE ist der Empfänger und kontaktA ist der Absender.
Ich habe jetzt mal verglichen mit
Code:
if (kontaktE.equals("")) {
als auch mit
Code:
if (kontaktE.isEmpty()) {
Das falsche Ergebnis ist darauf zurück zu führen, das in der Stichwortliste der Name doppelt enthalten war. Einmal am Anfang und einmal am Ende.
Dummer Fehler. Also muss ich dafür Sorgen, das keine doppelten Eintröge in die Stichwortlist eommen können.
 
Zuletzt bearbeitet:

MiMa

Top Contributor
Die Methode "getDateiInhalt" holt sich einen Plain Text.
Und der FileReader lädt die Stichwortliste.
Im Grunde ist ein Plain Text da und anhand der Stichwortliste soll verglichen werden, welche Stichworte, hier also Kontaktnamen für Absender und Empfänger im Text enthalten sind und an welcher Stelle diese stehen. Der Absender ist der mit der kleinsten Zahl also den kleinsten Stellenwert.
Eigentlich sollte das eine ganz simple Aufgabe für mich sein:confused: da es nur überprüft, ob die Stelle des Absenders kontaktA kleiner ist als kontakE (Empfänger).
Ich denke das Problem liegt daran, das ich mit zwei Variablen vergleiche. Vielleicht müsste ich noch eine dritte Variable haben, mit der ich durch die Stichworte laufen kann.
Der Absender müsste die kleinste Zahl sein.
Der Empfänger, die größte Zahl.
Und dann eine Laufvariable, mit der ich dann die kleinste und die größte Zahl prüfen kann.
Mir ist aufgefallen, das es hier 3 Überinstimmungen gibt. eine bei Position 107, eine bei 454 und eine bei 2534. Wobei dann im Endergebnis die Werte der Positionen 454 und 2534 enthalten waren. Der Wert bei 107 war einfach weg. Daher vielleicht der Vergleich mit 3 Variablen!
Das Ergebnis müsste sein Absender bei Position 107 und der Empfänger bei Position 454 wären korrekt.
 
Zuletzt bearbeitet:

MiMa

Top Contributor
Ich habe mir noch einige Gedanken gemacht und auch in Bücher gesucht.
Das Problem beim Sortieren ist, das ich nur diese eine Schleife verwenden möchte um den kleinsten Wert zu finden und den nächst größeren.
Meine Zahlen sind in folgender Reihenfolge 2534, 107, 2534, 454. Also 4 Vergleiche.
Den kleinsten Wert zu ermitteln war für auch nicht schwer und der Wert ist korrekt.
Schwieriger ist es den nächst höheren Wert zu ermitteln, wobei dieser erst mit dem nächsten Schleifendurchlauf bekannt wird. In einem Durchlauf kenne ich den vorherigen und den aktuellen Wert. Informationen werden nicht nur aus in einer Liste entnommen, sondern die dazugehörigen Zahlen werden im Schleifenlauf aus dem Text ermittelt.
Java:
// Schleife zum Einlesen der Stichworte
        IndexLogger.info("***   Abender und Empfaenger suchen   ***");
        while ((stichwort = stichwortListe.readLine()) != null) {
            // Wenn das Stichwort im Text enthalten ist
            if (dateiObjekt.getDateiInhalt().contains(stichwort)) {
                stichwortStelle = dateiObjekt.getDateiInhalt().indexOf(stichwort);

                System.out.println("Stichwort        : " + stichwort);
                System.out.println("Stichwort Stelle : " + stichwortStelle);
             
                // Sucht den kleinsten Wert für den Absender
                if (absenderStelle == 0) {
                    absender = stichwort;
                    absenderStelle = stichwortStelle;
                    IndexLogger.info("Der erste Wert des Absenders ist : " + absender + " " + absenderStelle);
                } // if - erster Absender Wert
             
                if (stichwortStelle < absenderStelle) {
                    absender = stichwort;
                    absenderStelle = stichwortStelle;
                    IndexLogger.info("Absender wurde ueberschrieben mit : " + absender + " " + absenderStelle);
                } // if - Absender ueberschreiben
            } // if - Text enthaelt Stichwort
        } // ende Schleife zum Einlesen der Stichworte
         IndexLogger.info("Der Absender ist : " + absender);
        // Schliessen des Readers
        stichwortListe.close();
Über eine Tipp wäre ich sehr Dankbar.
 

MiMa

Top Contributor
Ich hab es nun endlich geschafft :)
Java:
// Schleife zum Einlesen der Stichworte
        IndexLogger.info("***   Abender und Empfaenger suchen   ***");
        while ((stichwort = stichwortListe.readLine()) != null) {
            // Wenn das Stichwort im Text enthalten ist
            if (dateiObjekt.getDateiInhalt().contains(stichwort)) {
                stichwortStelle = dateiObjekt.getDateiInhalt().indexOf(stichwort);

                System.out.println("Stichwort        : " + stichwort);
                System.out.println("Stichwort Stelle : " + stichwortStelle);
               
                if (absenderStelle == 0) {
                    absender = stichwort;
                    absenderStelle = stichwortStelle;
                    IndexLogger.info("Der erste Wert des Absenders ist : " + absender + " " + absenderStelle);
                } // if - erster Absender Wert

                // Sucht den kleinsten Wert für den Absender
                if (stichwortStelle < absenderStelle) {
                    absender = stichwort;
                    absenderStelle = stichwortStelle;
                    IndexLogger.info("Absender wurde ueberschrieben mit : " + absender + " " + absenderStelle);
                } // if - Absender ueberschreiben
               
                if (empfaengerStelle == 0) {
                    empfaenger = stichwort;
                    empfaengerStelle = stichwortStelle;
                    IndexLogger.info("Der erste Wert des Empfaengers ist : " + empfaenger + " " + empfaengerStelle);
                } // if - erster Empfaenger Wert
               
                if ((stichwortStelle > absenderStelle) && (stichwortStelle < empfaengerStelle)) {
                    empfaenger = stichwort;
                    empfaengerStelle = stichwortStelle;
                    IndexLogger.info("Empfaenger wurde ueberschrieben mit : " + empfaenger + " " + empfaengerStelle);
                } // if - Empfaenger ueberschreiben
               
            } // if - Text enthaelt Stichwort
        } // ende Schleife zum Einlesen der Stichworte
         IndexLogger.info("Der Absender ist : " + absender);
         IndexLogger.info("Der Empfaenger ist : " + empfaenger);
        // Schliessen des Readers
        stichwortListe.close();
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Verbesserung der Laufzeit beim Sortieren von Einwohnern nach ihrem Geburtsjahr Allgemeine Java-Themen 0
Monokuma String List nach Zahlen und Worten sortieren Allgemeine Java-Themen 9
heyluigi Random Integer Array Ausgabe nach Größe sortieren Allgemeine Java-Themen 6
K Sortieren nach Vorgabe Allgemeine Java-Themen 6
G Map nach key sortieren Allgemeine Java-Themen 14
S Sortieren nach Objekten Allgemeine Java-Themen 13
B JTable nach Icon sortieren Allgemeine Java-Themen 6
J Map nach value sortieren Allgemeine Java-Themen 14
S String-Array nach Datum sortieren Allgemeine Java-Themen 10
Developer_X Ein Array nach einem bestimmten Attribut sortieren Allgemeine Java-Themen 3
D JTabel sortieren nach mehreren kriterien Allgemeine Java-Themen 3
G Verschachtelte Treemaps, nach Value sortieren Allgemeine Java-Themen 11
K ArrayList nach bestimmtem Muster sortieren Allgemeine Java-Themen 3
Spot84 Vector nach Ressourcetyp sortieren Allgemeine Java-Themen 4
C ArrayList nach Datum sortieren Allgemeine Java-Themen 7
T HashMap (String, Object(String , int)) nach int sortieren Allgemeine Java-Themen 7
S ArrayList nach mehreren Spalten sortieren? Allgemeine Java-Themen 13
L Nach Häufigkeit sortieren Allgemeine Java-Themen 6
Z Elemente in Vector nach Häufigkeit sortieren. Allgemeine Java-Themen 13
S Vector sortieren nach Objekt-Info? Allgemeine Java-Themen 9
J HashMap nach values sortieren Allgemeine Java-Themen 2
S Sortieren Von Objekten Nach Attribut Allgemeine Java-Themen 6
C Sortieren und Selektieren einer ArrayList<Point3D> Allgemeine Java-Themen 6
L allgemein Strings händisch in Liste sortieren Allgemeine Java-Themen 47
Willi.We Array sortieren Allgemeine Java-Themen 5
L ArrayList sortieren Allgemeine Java-Themen 2
MiMa ArrayList sortieren?? Allgemeine Java-Themen 5
C MySQL Tabellen sortieren. Allgemeine Java-Themen 33
Curtis_MC Collections Liste anhand mehrere Kriterien sortieren Allgemeine Java-Themen 6
B Java Mail: Emails sortieren? Allgemeine Java-Themen 5
G Liste (UsageStats) sortieren (Android) Allgemeine Java-Themen 5
FRI3ND Datentypen Date-Array sortieren - Text mitnehmen? Allgemeine Java-Themen 7
P Wertepaare sortieren Allgemeine Java-Themen 3
T Collections ArrayList Sortieren Allgemeine Java-Themen 4
P Listen sortieren Allgemeine Java-Themen 1
U Methoden Algorithmus MergeSort String [ ] array sortieren programmieren Allgemeine Java-Themen 17
S Verkettete (Teil)Liste sortieren ( rekursiv bis n) Allgemeine Java-Themen 2
K Strings sortieren: 2 Kritieren Allgemeine Java-Themen 5
B Algortihmus zum linearen Sortieren Allgemeine Java-Themen 1
K ArrayList sortieren Allgemeine Java-Themen 16
H Liste sortieren anhand optionalem Property Allgemeine Java-Themen 3
2 Mehrere Uhrzeiten Sortieren Allgemeine Java-Themen 2
B Counting Sort (Sortieren durch Zählen) Allgemeine Java-Themen 13
H Liste von Objekten generisch sortieren Allgemeine Java-Themen 0
Bluedaishi String Array mit Datum und Uhrzeit String sortieren Allgemeine Java-Themen 6
S Erste Schritte Arrayliste alphabetisch sortieren mit Eingabe Allgemeine Java-Themen 9
L Sortieren von "Map<String, Object>" Allgemeine Java-Themen 2
M Sortieren und Leerzeichen Allgemeine Java-Themen 11
W Array Indizes sortieren Allgemeine Java-Themen 16
D Sortieren von Liste zu unperformant Allgemeine Java-Themen 6
E Array alphabetisch sortieren Allgemeine Java-Themen 1
5 Objekte Sortieren lassen Allgemeine Java-Themen 7
P Beim sortieren nullpointerexception Allgemeine Java-Themen 12
T Array Sortieren (null Werte ans Ende) Allgemeine Java-Themen 2
Gossi Collections (Unbekannte) Liste Sortieren Allgemeine Java-Themen 10
S Int Values sortieren Allgemeine Java-Themen 7
A 2D-array problem (sortieren) Allgemeine Java-Themen 6
T Liste mit GregorianCalendar-Objekten in List einlesen, mit Collection sortieren und ausgeben Allgemeine Java-Themen 3
D priority queue sortieren Allgemeine Java-Themen 10
G List<Person> sortieren Allgemeine Java-Themen 6
K Hashmap sortieren Allgemeine Java-Themen 6
H Problem beim Sortieren einer HashMap mit TreeSet Allgemeine Java-Themen 4
M ArrayList<String>, String häufigkeit sortieren Allgemeine Java-Themen 4
J Wie sortieren? Allgemeine Java-Themen 11
T Liste sortieren Allgemeine Java-Themen 6
K Strings sortieren (knifflig) Allgemeine Java-Themen 7
C ArrayList (mit Objekten) sortieren Allgemeine Java-Themen 12
N Zahlen in Strings einer ArrayList sortieren Allgemeine Java-Themen 14
V ArrayList sortieren Allgemeine Java-Themen 7
B Sortieren mit generischen Datentypen Allgemeine Java-Themen 3
C ArrayList anhand von zwei Attributen sortieren Allgemeine Java-Themen 4
O Sortieren von Telefonnummern Allgemeine Java-Themen 8
I Vector mit Objekten sortieren,Videos mit JMF wiedergeben Allgemeine Java-Themen 6
S Koordinatentupel-Map sortieren?? Allgemeine Java-Themen 16
C ArrayList sortieren (mehrere Kriterien) Allgemeine Java-Themen 6
G ArrayList mit quicksort sortieren Allgemeine Java-Themen 9
G sortieren von generics Allgemeine Java-Themen 10
Z Als Final deklarierte Klasse im Array sortieren Allgemeine Java-Themen 2
O ArrayList sortieren Allgemeine Java-Themen 8
G ArrayList mit Indices parallel sortieren Allgemeine Java-Themen 8
D HashMap sortieren Allgemeine Java-Themen 2
C Sortieren File[] Allgemeine Java-Themen 5
W [solved] Vector sortieren (Collection / Comparable?) Allgemeine Java-Themen 7
D LinkedList anhand einer long-Variable der Objekte sortieren Allgemeine Java-Themen 5
O Vektoren in Vektor sortieren aber mit Java 1.4 (!) Allgemeine Java-Themen 4
T TreeMap durch Comparator mit Generics sortieren Allgemeine Java-Themen 9
M ArrayList sortieren - HashMap mit sort_id vorhanden Allgemeine Java-Themen 2
A Sortieren mit Java Allgemeine Java-Themen 3
J Properties sortieren Allgemeine Java-Themen 6
E Bitte um Rat: Sortieren mit ArrayList Allgemeine Java-Themen 2
G Strings die Zahlen enthalten sinnvoll sortieren (A2 < A10 Allgemeine Java-Themen 4
G List mit selbstdefinierten Objekten sortieren Allgemeine Java-Themen 2
F Doppelt verkettete Liste sortieren? Allgemeine Java-Themen 8
G Set absteigend Sortieren Allgemeine Java-Themen 6
B ein spezielles Byte-Array sortieren Allgemeine Java-Themen 11
D Sortieren? Allgemeine Java-Themen 13
N ArrayList sortieren Allgemeine Java-Themen 10
S Dten im Excel sortieren Allgemeine Java-Themen 5
H Objekte Sortieren Allgemeine Java-Themen 4
F Kann man String[] sortieren? Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben