Input/Output Wörter zählen & sortieren

banshee

Bekanntes Mitglied
Hallo,

wie lese ich denn am effizientesten eine große Textdatei (z.B. mehrere hundert Seiten) ein, sodass ich die benutzen Wörter am Ende in einer Collection habe? Ich stehe halt schon vor der Frage, lese ich zeilen- oder wortweise ein (zeichenweise dauert wahrscheinlich zu lang). Die Wörter würde ich dann einfach in einem Hashtable speichern, sodass ich die Vorkommen einzelner Wörter einfach zählen kann. Und am Ende kann ich dann ja sortieren oder anderweitig damit rumspielen.

Oder geht das noch besser?
 

banshee

Bekanntes Mitglied
okay und wie genau? Ich sehe im Moment nur den Unterschied, dass man wahlfreien Zugriff hat, nicht dass es effizienter wird. Und wie immer gibts ja tausend verschiedene Möglichkeiten, darauf zuzugreifen. Lese ich da jetzt byteweise in einen Puffer oder charweise bis zum nächsten Trennzeichen oder das gesamte file in einen Puffer oder zeilenweise in Strings oder oder oder?
 

AmunRa

Gesperrter Benutzer
Das hängt immer von der Art und Weise ab, wie dein File das du lesen möchtest, aufgebaut ist.

Es gibt eben nicht die Eierlegendewollmilchsau. Wenn die Struktur in dem File zeilenweise ist dann solltest du wohl zeilenweise Einlesen. wenn überhaupt keine Struktur vorhanden ist. dann wohl eher zeichenweise.
 
Zuletzt bearbeitet:

Landei

Top Contributor
Nimm eine TreeMap anstelle der Hashtable, dann kannst du die Wörter zählen, und sie werden "automatisch" (beim Einfügen) sortiert.
 

banshee

Bekanntes Mitglied
Ich checke irgendwie gerade gar nicht, was da passiert. Wenn ich einfach ABCDEFGHIJKLMNOPQRSTUVWXYZ in eine txt schreibe, diese einlese und dann immer readByte aufrufe, liest er mir E, N und W aus, wobei der file pointer bei den Zugriffen 0, 9 und 18 ist. Wie lese ich denn jetzt ein einzelnes Zeichen? Ein char liest ja bekanntlich gleich zwei bytes...

/edit: Es wird noch besser: Folgendes liest mir im ersten while-Durchlauf aus selbiger Datei den String G..Z ein:

Java:
try
		{
			String line;
			RandomAccessFile textfile = new RandomAccessFile("test.txt","r");
			TreeMap<String, Long> map = new TreeMap<String, Long>();
			
			while((line = textfile.readLine()) != null)
			{
				...
			}
		}
...

Das hier liest mir beim ersten readLine() E..Z ein:

Java:
try
		{
			String line;
			RandomAccessFile textfile = new RandomAccessFile("test.txt","r");
			line = textfile.readLine();
			TreeMap<String, Long> map = new TreeMap<String, Long>();
			
			while((line = textfile.readLine()) != null)
			{
				...
			}
		}

Und wenn ich den try/catch-Block kopiere und einfach vorher nochmal einfüge, wird an der gleichen Anweisung C..Z ausgelesen.
Jetzt weiß ich, wieso es RandomAccessFile heißt...

/e2: Ich verstehe das nicht. Ich lasse mir den FilePoint for meinem ersten read ausgeben, der steht auf 0, dann führe ich entweder ein readByte() oder readLine() aus und das erste eingelesene Zeichen ist immer das E. Wieso überspringt er die 6 Zeichen vorher? Bei anderen Textdateien überspringt er eine andere, zufällige Anzahl von Zeichen. Mal eins, mal fünf, usw.
 
Zuletzt bearbeitet:

banshee

Bekanntes Mitglied
Ja, der Code ist an sich wahrscheinlich weniger sinnvoll. Ich hab mir das erstmal im Debugger angeschaut um festzustellen, dass da völliger Mumpitz rauskommt (oder ich das System nicht verstehe)
 

banshee

Bekanntes Mitglied
Kann es sein, dass die TreeMap doch nicht das richtige für mich ist? Ich will die Wörter nach values sortieren und nicht nach keys und treeMap.values() ist eine Collection<Long>, die ich dann nicht so einfach sortieren kann.
 

Landei

Top Contributor
Ach so, eine TreeMap sortiert nur nach Keys. Man kann mit einem Comparator so tricksen, dass auch die Values berücksichtigt werden, aber ich bezweifle, dass das eine gute Idee ist. Ich würde nachträglich die Map.Entries in eine Liste packen und diese sortieren (dann ist auch völlig egal, welche Map-Implementierung du nimmst):

Java:
import java.util.*;
...

Map<String, Long> map = ...
List<Map.Entry<String,Long>> list = new ArrayList<Map.Entry<String,Long>>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<String,Long>>(){
    public int compare(Entry<String, Long> one, Entry<String, Long> two) {
        int result = Long.valueOf(two.getValue()).compareTo(Long.valueOf(one.getValue()));
        return result == 0 ? one.getKey().compareTo(two.getKey()) : result;
    }
});

Das sortiert [c]list[/c] zuerst nach Value (absteigend) und bei "Gleichstand" nach Key.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z Satz aufteilen und die Wörter zählen (HashMap) Java Basics - Anfänger-Themen 15
B Collections Java Wörter in String zählen und geordnet ausgeben Java Basics - Anfänger-Themen 10
A Text teilen und Wörter zählen Java Basics - Anfänger-Themen 7
S Buchstaben/Wörter im String zählen Java Basics - Anfänger-Themen 6
J Wörter in einem string zählen und die anzahl zurückgeben Java Basics - Anfänger-Themen 4
S Wörter zählen Java Basics - Anfänger-Themen 19
N Wörter zählen im String Java Basics - Anfänger-Themen 3
G Wörter Zählen Java Basics - Anfänger-Themen 11
J Wörter im String zählen Java Basics - Anfänger-Themen 4
P wörter im string zählen Java Basics - Anfänger-Themen 9
G Häufigkeit der Wörter einer Webseite zählen Java Basics - Anfänger-Themen 7
K Wörter zählen auf Internetseiten... die zweite Java Basics - Anfänger-Themen 4
julian0507 Wörter einlesen lassen und rückwärts ausgeben Java Basics - Anfänger-Themen 7
B String - Wörter finden, welches Punkt und entsprechender Pre / Suffix hat? Java Basics - Anfänger-Themen 30
M Regex für bestimmte Wörter bzw. bestimmte Zeichen erstellen Java Basics - Anfänger-Themen 5
N Wörter und Zahlen nach speziellen Wörtern ausgeben Java Basics - Anfänger-Themen 11
S spezielle Wörter aus Liste entfernen Java Basics - Anfänger-Themen 2
J Wörter aus Textdatei suchen Java Basics - Anfänger-Themen 2
CptK Datentypen Verdrehte Wörter wieder herstellen Java Basics - Anfänger-Themen 21
CptK Variablen Wörter erschließen Java Basics - Anfänger-Themen 7
B String: suche nach Wörter und in List<String> speichern Java Basics - Anfänger-Themen 3
Orkanson Methoden String in Wörter zerlegen und Endungen der Wörter überprüfen. Java Basics - Anfänger-Themen 4
JavaNewbie2.0 Tausende Wörter in Arrays automatisch einfügen Java Basics - Anfänger-Themen 10
E Datei einlesen und bestimmte Wörter ausgeben Java Basics - Anfänger-Themen 2
DestinatioN Problem beim splitten eines Satzes in Wörter und die Wörter in Buchstaben Java Basics - Anfänger-Themen 2
A Wie am effizientesten bzw. schnellsten Namen/Wörter sortieren? Java Basics - Anfänger-Themen 1
I String teilen und zwei Wörter generieren Java Basics - Anfänger-Themen 1
I String trennen und verschiedene Wörter holen Java Basics - Anfänger-Themen 6
T Eingegebene Wörter ausgeben? Java Basics - Anfänger-Themen 3
T Wörter mit @ als Zeichen finden Java Basics - Anfänger-Themen 13
J Alle Wörter der Länge n mit 0 und 1 Java Basics - Anfänger-Themen 17
G wörter speichern Java Basics - Anfänger-Themen 12
T Erste Schritte einzelne Wörter aus textdatei lesen... Java Basics - Anfänger-Themen 4
C Wörter aus einer txt datei lesen Java Basics - Anfänger-Themen 19
C String Arrays - häufigste Wörter Java Basics - Anfänger-Themen 10
T Erste Schritte Eingelesenen Satz - Wörter und Leerzeichen getrennt in 2x Array's Java Basics - Anfänger-Themen 7
K Anzahl Wörter in Zeile Java Basics - Anfänger-Themen 24
F wörter trennen und in txt-file schreiben Java Basics - Anfänger-Themen 5
J Von einem String einzelne Wörter speichern Java Basics - Anfänger-Themen 6
R Wörter-KarteiSystem/Vokabel Trainer Source Fragen Java Basics - Anfänger-Themen 9
A Wörter umgekehrten Reihenfolge ausgeben Java Basics - Anfänger-Themen 3
P Zwei Wörter vergleichen Java Basics - Anfänger-Themen 11
Screen Wie lese ich Wörter ein? Java Basics - Anfänger-Themen 6
C Wörter suchen Java Basics - Anfänger-Themen 4
M Anzahl von Wörter in einer eingelesenen Datei Java Basics - Anfänger-Themen 10
S Regex, Wörter ersetzen Java Basics - Anfänger-Themen 2
S Welche Bedeutung haben diese Wörter? Java Basics - Anfänger-Themen 2
S Zeilen, Zeichen, Wörter Java Basics - Anfänger-Themen 3
T Wörteranzahl im Array zählen Java Basics - Anfänger-Themen 9
M Häufigkeit von Wörtern zählen Java Basics - Anfänger-Themen 6
Cassy3 Binäre Bäume Rekursiv durchlaufen und bestimmte Elemente Zählen Java Basics - Anfänger-Themen 6
D spezifische Knoten in einem Baum zählen Java Basics - Anfänger-Themen 9
F Werte in einer Arraylist Zählen Java Basics - Anfänger-Themen 2
S Java Methodenaufrufe zählen Java Basics - Anfänger-Themen 4
P Doppelte werte in einer Liste zählen Java Basics - Anfänger-Themen 11
S Methoden Methodenaufruf rekursiv zählen Java Basics - Anfänger-Themen 4
J Methoden Positive Werte zählen Java Basics - Anfänger-Themen 3
H Buchstaben zählen Java Basics - Anfänger-Themen 9
Poppigescorn Häufigkeit einer zahl zählen Java Basics - Anfänger-Themen 5
HighLife Bestimmte Werte aus Array zählen Java Basics - Anfänger-Themen 15
O Attribute die Methoden zählen Java Basics - Anfänger-Themen 5
X Game of Life Nachbarn zählen Java Basics - Anfänger-Themen 20
F Java Programm, das kleine Buchstaben in einem String zählen soll und bei großen Buchstaben oder Sonderzeichen abbrechen soll. Java Basics - Anfänger-Themen 5
S Binärbäume knoten zählen Java Basics - Anfänger-Themen 16
K Counts zählen Java Basics - Anfänger-Themen 23
Kirby.exe Anzahl vorkommender Elemente im Array zählen Java Basics - Anfänger-Themen 9
J Zeichen im String zählen Java Basics - Anfänger-Themen 3
G Binärer Suchbaum Knoten zählen Java Basics - Anfänger-Themen 1
N Zeichen in einem Textfeld zählen und hinterlegen Java Basics - Anfänger-Themen 6
E Knoten eines Baumes unter Bedinung zählen Java Basics - Anfänger-Themen 2
T x Schritte zählen Java Basics - Anfänger-Themen 18
P Schlüsselworte Zählen und Zuweisen von eingelesenen Zahlen Java Basics - Anfänger-Themen 1
A In einem String alle Eigennamen zählen Java Basics - Anfänger-Themen 6
L Baum Knoten zählen Java Basics - Anfänger-Themen 6
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
S Zählen der Zeiger auf Objekte Java Basics - Anfänger-Themen 35
S Zeichen zählen kopierter Text Java Basics - Anfänger-Themen 6
B Array - die Häufigkeit der Zahl zählen Java Basics - Anfänger-Themen 9
L Vorherige Objekte zählen und ausgeben Java Basics - Anfänger-Themen 11
L Diphthonge zählen... Java Basics - Anfänger-Themen 5
O ELOPS Zählen Java Basics - Anfänger-Themen 1
S Rekursives Zählen einer Zahl Java Basics - Anfänger-Themen 8
X Quick Sort - Vergleichsoperationen zählen Java Basics - Anfänger-Themen 0
K alle Vorkommen einer bestimmten Ziffer in einer Zahl zählen Java Basics - Anfänger-Themen 2
O Großbuchstaben im Satz zählen Java Basics - Anfänger-Themen 6
S zahl hoch und runter zählen per button Java Basics - Anfänger-Themen 25
N Zählen von Rationalen Werten eines Arrays Java Basics - Anfänger-Themen 10
Y for-Schleife zählen Java Basics - Anfänger-Themen 6
K Probleme mit Sortieren und dem Zählen Java Basics - Anfänger-Themen 13
S Vererbung Objekte von Ober - und Unterklassen zählen Java Basics - Anfänger-Themen 3
F SubString in String zählen Java Basics - Anfänger-Themen 3
C Im Array zählen und verändern Java Basics - Anfänger-Themen 5
O Zählen der while-Scheife Java Basics - Anfänger-Themen 3
P bytes aus einem InputStream zählen Java Basics - Anfänger-Themen 2
G Erste Schritte Einen Array absuchen und Buchstaben zählen Java Basics - Anfänger-Themen 17
F Problem mit Tabulatoren bei Zeilen zählen einer Textdatei Java Basics - Anfänger-Themen 17
F Textdatei einlesen und Zeilen zählen Java Basics - Anfänger-Themen 10
D Groß/KleinBuchstaben zählen Java Basics - Anfänger-Themen 21
D Buchstabe zählen/mappen Java Basics - Anfänger-Themen 3
S Anzahl unterschiedlicher Elemente zählen Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben