Swing HashMap zu Tabelle macht mir Probleme

hilfehhhhh

Mitglied
Guten Abend,

ich bräuchte Hilfe bei einem Project. In diesem Project muss ich einen englischen Text einlesen und daraus alle eigenen Namen zählen. Dieser Text wird davor noch in Abschnitte mit jeweils 2000 Wörter aufgeteilt. Hier mein Code:
Code (Java):
Java:
/**
*
*/
package einlesen;

/**
* @author a
*
*/
import java.io.*;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
import javax.swing.table.TableColumn;



public class Einlesen {


    /**
     * @param args
     * @throws IOException
     */
    @SuppressWarnings({ "resource" })
    public static void main(String[] args) throws IOException {
   
        JFrame frame = new JFrame();
        frame.setVisible(true);
        frame.setSize(800, 800);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
   
        JPanel panel = new JPanel();
        frame.add(panel);
   
        JTable table = new JTable();
        panel.add(table);
   
        Scanner scan = new Scanner (System.in);
        String antwort = null;
   
        JLabel label1 = new JLabel("Welches Dokument wollen Sie? Geben Sie dabei den Path an, bitte.");
        panel.add(label1);
   
        JTextField textfield = new JTextField(antwort, 20);
        panel.add(textfield);
        antwort = scan.nextLine();
   
        String path = System.getProperty("user.home");
        //System.out.println(path);
        File file = Paths.get(path, antwort).toFile();
   
        FileReader fr = new FileReader(file);
        BufferedReader br = new BufferedReader(fr);
        Scanner sc = new Scanner(br);
        List<String> wörter = new ArrayList<String>();

        while( sc.hasNext() )
        {
              String wort = sc.next();
              // Remove quotes
              if (wort.startsWith("\"")) { wort = wort.substring(1); }
              if (wort.endsWith("\"")) { wort = wort.substring(0, wort.length() - 1); }
              wörter.add(wort);
        }
        

        br.close();
   
        int chunkStartIndex = 0;
        while (wörter.size() - chunkStartIndex > 0) {
           
                int chunkEndIndex = chunkStartIndex + 2000;
                if (chunkEndIndex > wörter.size()) {
                    chunkEndIndex = wörter.size();
                }
                List<String> chunkOfWords = wörter.subList(chunkStartIndex, chunkEndIndex);
           
                Map<String, Integer> wordsInTheMiddle = new HashMap<>();

                for( int i = 0; i < chunkOfWords.size(); i++)
                {
               
                    String word = chunkOfWords.get(i);

                    if (word.matches("[A-Z][a-z][a-z]\\w+")) {
                   
                        wordsInTheMiddle.putIfAbsent(word, 0);
                        int oldCount = wordsInTheMiddle.get(word);
                        wordsInTheMiddle.put(word, oldCount + 1);

                    }
                }
           
                //                   do not process the last word! Would cause an index out of bounds exception.
                for (int i = 0; i < chunkOfWords.size() - 1; i++ ) {
               
                    String word = chunkOfWords.get(i);
               

                    if( word.matches("\\w*(\\.|\\?|!)$")) {

                        // Word is at end of sentence
                        String nextWord = chunkOfWords.get(i+1);
                   
                        if ( wordsInTheMiddle.getOrDefault(nextWord, 0) < 2) {
                       
                            // sort out words that appear at the beginning of a sentence and appear less than 2 times in the text
                            wordsInTheMiddle.remove(nextWord);
                       
                        }
                   
                    }
               
                }

                // remove blacklisted words
               String[] blacklist = { "This",  "When", "Night", "Most", "Stone", "There", "Bonfire", "Tuesday", "Their", "They", "Professor", "Famous", "About", "Madam", "Nearly", "Aunt", "What", "Uncle", "Mommy", "Scars", "Scotch", "Every", "That" };
               for (String listedWord : blacklist) {
              
                   wordsInTheMiddle.remove(listedWord);
              
               }
           
                System.out.println("Mitte: " + wordsInTheMiddle);

                table.addColumn((TableColumn) wordsInTheMiddle);
           
                chunkStartIndex = chunkEndIndex;
           
            }
   
        }

    }
Dieser Code funktioniert noch nicht richtig, da ich noch rausfinden muss, wie ich die eine Antwort eingeben kann, um darauf die Tabelle zu erhalten.
Hier benutze ich ja die HashMap. Aber ich habe keine Ahnung, wie ich sie in eine Tabelle einfügen soll, denn ich bin mir ziemlich sicher, dass der Code für die Tabelle falsch ist.
Die Tabelle soll eine Spalte für die am häufigsten vorkommende Namen mit Gesamtanzahl haben. Die Restlichen Spalten sind für die verschiedenen Abschnitten mit der Beschriftung ganz oben und in den einzelnen Zeilen, die Anzahl der Namen in diesem Abschnitt
 
Zuletzt bearbeitet von einem Moderator:

MoxxiManagarm

Top Contributor
Hallo,

Bitte verwende für Java Code immer entsprechende Tag: [code=java]hier dein code[/code]
Das macht es um einiges leslicher und erhöht die Chance, dass dir geholfen wird.

Es ist kein JavaFX, es ist Swing. Die Markierung im Titel ist daher falsch.

Ich glaube du hast nicht nur ein Problem. (Sorry)

1. Es fängt an, dass du alles in eine main packst. Bitte erstelle eine sinnvolle Klasse.
2. Du führst setVisible(true) auf bevor du die Komponenten hinzufügst. setVisible(true) sollte immer zum Schluss kommen
3. Deine Tabelle braucht ein Model, sonst wird es mit dem setzen der Daten vermutlich nichts.
4. Bitte benenne deine Variable wörter um. Umlaute können Probleme erzeugen.
5. Alles was nach diesen Zeilen kommt:

Java:
//Dieser Code funktioniert noch nicht richtig, da ich noch rausfinden muss, wie ich die eine Antwort eingeben kann, um darauf die Tabelle zu erhalten.
JTextField textfield = new JTextField(antwort, 20);
        panel.add(textfield);
        antwort = scan.nextLine();

Habe ich kaum begutachtet. Du gibst dem Anwender keine Möglichkeit eine Antwort in das Textfeld einzugeben. Die Eingabe (abgeschlossen mit Enter) ist ein ActionEvent. Du musst dem texfield (oder einem Bestätigungsbutton) ein addActionListener() geben. in actionPerformed wird dann die Antwort gelesen und die Datei geladen.

https://docs.oracle.com/javase/tutorial/uiswing/components/textfield.html


Gruß
MM
 

hilfehhhhh

Mitglied
Danke für die Rückmeldung.
1. Im Moment will ich keine weiteren Klassen erstellen, da ich noch nicht so geschickt in Java bin.
Deshalb weiß ich auch nicht genau was du mit Modell meinst.
Zu den restlichen Punkten habe ich schon meinen Code etwas verändert und noch was dazu getan:
Code:
package einlesen;

/**
* @author a
*
*/

import java.io.*;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.RowSorter;
import javax.swing.SortOrder;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;

public class Einlesen {

    /**
     * @param args
     * @throws IOException
     */
    @SuppressWarnings({ "resource" })
    public static void main(String[] args) throws IOException {

        Scanner scan = new Scanner(System.in);
        String antwort;

        System.out.println("Welches Dokument wollen Sie? Geben Sie dabei den Path an, bitte.");
        antwort = ("Downloads/lol.txt"); // scan.nextLine();

        String path = System.getProperty("user.home");
        // System.out.println(path);
        File file = Paths.get(path, antwort).toFile();

        FileReader fr = new FileReader(file);
        BufferedReader br = new BufferedReader(fr);
        Scanner sc = new Scanner(br);
        List<String> word = new ArrayList<String>();

        while (sc.hasNext()) {
            String wort = sc.next();
            // Remove quotes
            if (wort.startsWith("\"")) {
                wort = wort.substring(1);
            }
            if (wort.endsWith("\"")) {
                wort = wort.substring(0, wort.length() - 1);
            }
            word.add(wort);
        }

        br.close();

        int chunkStartIndex = 0;
        Map<String, Integer> wordsInTheMiddle = new HashMap<>();
        while (word.size() - chunkStartIndex > 0) {

            int chunkEndIndex = chunkStartIndex + 2000;
            if (chunkEndIndex > word.size()) {
                chunkEndIndex = word.size();
            }
            List<String> chunkOfWords = word.subList(chunkStartIndex, chunkEndIndex);

            for (int i = 0; i < chunkOfWords.size(); i++) {

                String word1 = chunkOfWords.get(i);

                if (word1.matches("[A-Z][a-z][a-z]\\w+")) {

                    wordsInTheMiddle.putIfAbsent(word1, 0);
                    int oldCount = wordsInTheMiddle.get(word1);
                    wordsInTheMiddle.put(word1, oldCount + 1);

                }
            }

            // do not process the last word! Would cause an index out of bounds exception.
            for (int i = 0; i < chunkOfWords.size() - 1; i++) {

                String word1 = chunkOfWords.get(i);

                if (word1.matches("\\w*(\\.|\\?|!)$")) {

                    // Word is at end of sentence
                    String nextWord = chunkOfWords.get(i + 1);

                    if (wordsInTheMiddle.getOrDefault(nextWord, 0) < 2) {

                        // sort out words that appear at the beginning of a sentence and appear less
                        // than 2 times in the text
                        wordsInTheMiddle.remove(nextWord);

                    }

                }

            }

            // remove blacklisted words
            String[] blacklist = { "This", "When", "Night", "Most", "Stone", "There", "Bonfire", "Tuesday", "Their",
                    "They", "Professor", "Famous", "About", "Madam", "Nearly", "Aunt", "What", "Uncle", "Mommy",
                    "Scars", "Scotch", "Every", "That" };
            for (String listedWord : blacklist) {

                wordsInTheMiddle.remove(listedWord);

            }

            System.out.println("Mitte: " + wordsInTheMiddle);

            chunkStartIndex = chunkEndIndex;

        }
     
     
        JTable t = new JTable(toTableModel(wordsInTheMiddle));

        TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(t.getModel());
        t.setRowSorter(sorter);

        List<RowSorter.SortKey> sortKeys = new ArrayList<>(25);
        sortKeys.add(new RowSorter.SortKey(1, SortOrder.DESCENDING));
        sorter.setSortKeys(sortKeys);

        JPanel p = new JPanel();
        p.add(t);
        JFrame f = new JFrame();
        f.add(p);
        f.setSize(200, 600);
        f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        f.setVisible(true);
     

    }
 

 
    public static TableModel toTableModel(Map<?, ?> map) {
        DefaultTableModel model = new DefaultTableModel(new Object[] { "Key", "Value" }, 0);
        for (Map.Entry<?, ?> entry : map.entrySet()) {
            model.addRow(new Object[] { entry.getKey(), entry.getValue() });
            for (int a = 4;model.getColumnCount() <= a;){
                int l = 1;
                model.addColumn(l + "Abschnitt");
                ++l;
             
            }
        }
     
        return model;

    }

}

Hier wie man sieht, fange ich erst mit der Tabelle an. Ich habe die Tablle schon erstellt und zwei Spalten habe ich schon. Die eine mit dem Key und die andere mit dem Value. Jetzt will ich noch mehr Spalten einsetzten mit der Anzahl and eigenen Wörtern in den verschiedenen Abschnitten. Ich habe es schon einigermaßen geschafft, aber die Werte wollen nicht rein.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Tabelle aus CSV, 2 dimensionale HashMap? Allgemeine Java-Themen 4
OnDemand Java String in Hashmap als Key NULL Allgemeine Java-Themen 27
T HashMap values Bearbeitung Allgemeine Java-Themen 4
T Hashmap Values Bearbeitung Allgemeine Java-Themen 1
JavaJakob22 Bestimmte HashMap importieren Allgemeine Java-Themen 4
killig HashMap mit if-Anweisung überprüfen Allgemeine Java-Themen 4
killig Textdatei einlesen und in HashMap speichern (duplikate entfernen) Allgemeine Java-Themen 12
LimDul Kam eine java.net.URL zu einer HashMap und ging als DNS Anfrage wieder heraus Allgemeine Java-Themen 18
L HashMap Allgemeine Java-Themen 10
X Collections Gibt es eine Klasse welche die Vorteile von List und HashMap vereint, aber konstante Laufzeit (O(1)) hat in Java? Allgemeine Java-Themen 4
B HashMap Duplikate Allgemeine Java-Themen 4
A HashMap Methode "get()"-Problem Allgemeine Java-Themen 28
W Array vs. ArrayList vs. HashMap Allgemeine Java-Themen 20
D Mit Java PHP hashmap lesen Allgemeine Java-Themen 1
B HashMap aus Value Key bekommen Allgemeine Java-Themen 2
N HashMap und Methoden richtig einbinden Allgemeine Java-Themen 2
J Problem bei Hashmap Key-Abfrage Allgemeine Java-Themen 4
X JSONObject auslesen und in HashMap hinterlegen Allgemeine Java-Themen 16
N Werte aus Hashmap auslesen und übertragen Allgemeine Java-Themen 8
JavaWolf165 JsonObject in HashMap umwandeln Allgemeine Java-Themen 16
R ArrayList und HashMap Allgemeine Java-Themen 7
L Assoziatives Datenfeld, schneller wie Hashmap Allgemeine Java-Themen 35
G Methoden HashMap speichert unter falschen Schlüsseln Allgemeine Java-Themen 6
D Verschachtelte HashMap initializieren Allgemeine Java-Themen 1
L Variablen HashMap nimmt value nicht an Allgemeine Java-Themen 3
R Hierarchie mit HashMap darstellen Allgemeine Java-Themen 19
D Datentypen HashCollision in HashMap Allgemeine Java-Themen 3
Z Concurrent Modification Exception - HashMap (kein remove) Allgemeine Java-Themen 4
B Zugriff auf eine HashMap Allgemeine Java-Themen 4
B Userdaten in Hashmap speichern - Servlet Allgemeine Java-Themen 6
T Hashmap mit geordneter/ungeordneter liste als Value Allgemeine Java-Themen 5
I HashMap key wird nicht erkannt trotz überschriebener equals/hashCode Methode Allgemeine Java-Themen 6
M Füllfaktor einer Hashmap Allgemeine Java-Themen 7
A Collections HashMap.containsKey findet keine immutablen Objekte Allgemeine Java-Themen 3
D Datentypen HashMap Allgemeine Java-Themen 5
R Collections Performance einer HashMap Allgemeine Java-Themen 26
C LinkedList und ArrayList in HashMap Allgemeine Java-Themen 4
T Erste Schritte HashMap<String, int> Allgemeine Java-Themen 2
K Hashmap sortieren Allgemeine Java-Themen 6
F HashMap überschreibt Daten von anderen HashMap Allgemeine Java-Themen 5
S HashMap containsKey liefert immer false zurück Allgemeine Java-Themen 15
H Problem beim Sortieren einer HashMap mit TreeSet Allgemeine Java-Themen 4
K HashMap sorting verhindern Allgemeine Java-Themen 10
J Generic von einer ArrayList/HashMap bekommen Allgemeine Java-Themen 7
L HashMap mit Enum Keys Allgemeine Java-Themen 3
J Array als Schlüssel für HashMap Allgemeine Java-Themen 6
S Geschwindigkeit HashMap oder .getParent Allgemeine Java-Themen 5
V Hashmap-Frage Allgemeine Java-Themen 3
M HashMap - Ich bin verwirrt Allgemeine Java-Themen 3
H2SO3- multiple Hashmap Allgemeine Java-Themen 5
K Threading - schreiben auf Hashmap/löschen - ConcurrentModificationException Allgemeine Java-Themen 3
J NullPointerException mit HashMap Allgemeine Java-Themen 2
V Probleme mit eigener Hashmap Allgemeine Java-Themen 10
N HashMap<String,Vector<String>> a = new HashMap<String,Vector<String>>(); Allgemeine Java-Themen 4
I HashMap Problem... Allgemeine Java-Themen 3
C HashMap Allgemeine Java-Themen 12
Daniel_L Map/HashMap - Reihenfolge von Einträgen Allgemeine Java-Themen 4
L HashMap Key Reihenfolge umkehren Allgemeine Java-Themen 8
N wie greife ich auf hashmap in vector zu Allgemeine Java-Themen 9
J Inhalt von HashMap vergleichen Allgemeine Java-Themen 3
Z Serialisierung und Deserialisierung einer HashMap Allgemeine Java-Themen 17
P Wieso HashMap-Zugriff mit Object, statt mit MyObject? Allgemeine Java-Themen 12
K Serialisierung von Hashmap in Vector Allgemeine Java-Themen 3
T Hashmap füllen mit rs sortierung Allgemeine Java-Themen 9
D HashMap sortieren Allgemeine Java-Themen 2
P Große Datenmenge wie speichern (HashMap? TreeMap?) Allgemeine Java-Themen 11
D HashMap Problem Allgemeine Java-Themen 14
G Runnables aus Hashmap starten Allgemeine Java-Themen 4
J java.util.ConcurrentModificationException bei HashMap? Allgemeine Java-Themen 2
G HashMap key ändern Allgemeine Java-Themen 5
L HashMap / Objekte auf Festplatte zur Laufzeit auf HD swappen Allgemeine Java-Themen 7
S Problem mit Hashmap Allgemeine Java-Themen 2
G Datei einlesen und in HashMap verarbeiten Allgemeine Java-Themen 3
E Auslesen aus Hashmap Allgemeine Java-Themen 3
P HashMap mit mehreren gleichen keys Allgemeine Java-Themen 4
alexpetri hashmap bästpractice Allgemeine Java-Themen 4
J HashMap mit Webservice realisierbar? Allgemeine Java-Themen 4
ARadauer hashmap vs hastable Allgemeine Java-Themen 5
T HashMap#values Reihenfolge Allgemeine Java-Themen 13
M ArrayList sortieren - HashMap mit sort_id vorhanden Allgemeine Java-Themen 2
L Wie kann ich eine HashMap abspeichern? Allgemeine Java-Themen 3
T HashMap (String, Object(String , int)) nach int sortieren Allgemeine Java-Themen 7
M HashMap kapselt zwei Objekte aber wie baut man eine Matrix? Allgemeine Java-Themen 2
E MySQL-Datenbank <-> HashMap/TreeMap Allgemeine Java-Themen 1
P List in Hashmap schreiben Allgemeine Java-Themen 5
M Threads in einer Hashmap Allgemeine Java-Themen 5
P HashMap an 2 Stellen veränderbar Allgemeine Java-Themen 13
P HashMap auflösen Allgemeine Java-Themen 9
MQue HashMap durchlaufen Allgemeine Java-Themen 2
MQue HashMap Allgemeine Java-Themen 2
M HashMap kommt beim Löschen aus dem Tritt Allgemeine Java-Themen 6
MQue HashMap Allgemeine Java-Themen 6
MQue HashMap Allgemeine Java-Themen 9
MQue Sichtbarkeit/HashMap/NullPointerexception Allgemeine Java-Themen 2
B HashMap.containsKey. Allgemeine Java-Themen 10
J byte-Array in Hashmap speichern? Allgemeine Java-Themen 3
S Klasse in HashMap speichern Allgemeine Java-Themen 3
G [quote]the type HashMap is not generic; it cannot be paramet Allgemeine Java-Themen 4
M HashMap sortiert Allgemeine Java-Themen 6
G Performance JDOM - DOM - eigene HashMap (SAX) Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben