RandomAccessFile

  • Themenstarter Themenstarter BonanZa7
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
B

BonanZa7

Gast
Über RandomAccessFile werden immer neue Wörter in eine Datei geschrieben. Es gibt immer ein Wort pro Zeile. Wie kann ich ein Zufälliges Wort heraussuchen aus der Datei?
mfg
 
Warum per RandomAccessFile, wenn pro Zeile ein Wort ?

ZeilenWeise ist z.b. BufferedReader zum lesen bzw. PrintWriter zum schreiben besser. Zufallszahl aussuchen, soviele zeilen einlesen und das letzte wort isses.

edit: achja, kannst auch beim RAF readLine nutzen
 
Wie zufällig muss das Wort denn sein?

Du könntest z. B. eine Zufallszahl [0; Dateilänge[ wählen und an der Stelle in der Datei das Wort ablesen. Dazu musst du ggf. den Wortanfang und das Wortende erst noch suchen. Einfach ab der Stelle zurück- bzw. vorgehen. Beachte aber, dass längere Wörter eine größere Wahrscheinlichkeit haben. Das geht auch nur mit RandomAccess(-File).

Eine andere Möglichkeit wäre das zeilenweise Einlesen. Dabei wird jede neue Zeile bzw. neues Wort gewichtet und je nach Zufallzahl ggf eingelesen. Sowas kann man machen, wenn man die Anzahl der Zeilen nicht kennt, wenn die Wortlänge stark variiert und wenn man nur Streams benutzen darf.
 
Ja ich schreibe die Wörter zeilenweise in die Datei.
Wie genau mache ich das jetzt mit readLine() dass ich ein zufälliges bekomme?
 
Oder lies einfach den ganzen Scheiß in eine java.util.List oder ein String[] und such dir dann eins zufällig aus, wenn die Anzahl der Wörter gering ist.
 
Anonymous hat gesagt.:
Ja ich schreibe die Wörter zeilenweise in die Datei.
Wie genau mache ich das jetzt mit readLine() dass ich ein zufälliges bekomme?
werden während du das wort lesen willst neue wörter eingeschrieben oder ist das statisch ?

neu geschrieben:
per Random (dabei muss die anzahl der geschriebenen wörter bekannt sein, um die obergrenze von random zu haben) eine zahl ermitteln, in einer Schleife die Datei zeilenweise lesen, bis du die zahl- Anzahl der Zeilen hast....

statisch:
Datei einmal in eine List / array schreiben... einen zufälliges Wort daraus ermitteln
 
Wie wäre es mit RandomAccessFile#seek((long)(file.length()*doubleRandom)),
dann den Zeilenanfang ermitteln und die Zeile ausgeben?
So würde ich es machen, statt alles in ein Array einzulesen.
 
Gast: Wenn die Wörter unterschiedlich lang sind, haben längere Wörter bei deiner Variante eben eine entsprechend höhere Wahrscheinlichkeit, was ja wahrscheinlich nicht gewünscht ist.
 
Wenn ich die Wörter aus der Datei in ein Array bzw Liste schreibe. Woher weiss ich dann wie groß bzw. wieviele Elemente das Array haben muss? Brauch ich ja beim erstellen des Arrays oder der Liste....oder nicht?

Also wenn ich jetzt z.B. String[] a = new String[34]; mache die Datei mit den Wörtern aber mehr als 34 hat...wie mache ich das jetzt?
 
messi hat gesagt.:

jetzt hab ich auch mal ne frage:
strg.split(" ",int); ist ein array. int muss bekannt sein. gibt es dafür auch eine entsprechende methode in der das int nicht bekannt sein muss?? (allso quasi eine split-methode die ihr daten nicht in einem array sonderm in einer arraylist speichert, oder so)
 
Illuvatar hat gesagt.:
Gast: Wenn die Wörter unterschiedlich lang sind, haben längere Wörter bei deiner Variante eben eine entsprechend höhere Wahrscheinlichkeit, was ja wahrscheinlich nicht gewünscht ist.
Stimmt. 😉
Wahrscheinlich geht es hier nur um "paar" Einträge, die man locker in den Speicher kriegt.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben