software entwicklung

Bitte aktiviere JavaScript!
A

Anzeige




Vielleicht hilft dir unser Kurs hier weiter —> (hier klicken)
Mal grob übersetzt: Die lines() Methode der Java BufferedReader Klasse gibt einen Stream von Elementen zurück, bei denen es sich um Zeilen handelt, die von diesem BufferedReader gelesen wurden.
 
Die Elemente des Streams sind die Zeilen der Datei.

Kurz: die lines() Methode gibt die Zeilen einer Datei als Stream zurück. Ein Stream<T> ist eine Folge von Elementen des Typs T (das hat nichts mit den I/O-Streams aus dem Paket java.io zu tun).
 
Richtig. Ich habe im Kommentar #124 noch etwas ergänzt.
Ah okay das heißt in der Liste wird der Stream so gespeichert

Erstes Element 1 Hah haha haha hä
Zweites Element hahaha hahah
Drittes Element h h h h h h
.....

Immer wenn neue Zeilen kommen!

Aber dann wäre die Aufgabe 1
Doch geklärt ?
Die wollen dass wir den String nach jeder Zeile Filtern
 
Um zum Beispiel aus einer Datei test.txt alle Zeilen, in denen die Zeichenfolge "wie" vorkommt, zu zählen:
Java:
long anzahl = Files.lines("test.txt") // Aus einem Stream mit Zeilen
    .filter(zeile -> zeile.contains("wie")) // nur die Zeilen, die "wie" enthalten
    .count(); // zählen
Um doppelte Zeilen nicht mitzuzählen:
Java:
long anzahl = Files.lines("test.txt") // Aus einem Stream mit Zeilen
    .filter(zeile -> zeile.contains("wie")) // nur die Zeilen, die "wie" enthalten
    .distinct() // und jede nur einmal
    .count(); // zählen
 
Um zum Beispiel aus einer Datei test.txt alle Zeilen, in denen die Zeichenfolge "wie" vorkommt, zu zählen:
Java:
long anzahl = Files.lines("test.txt") // Aus einem Stream mit Zeilen
    .filter(zeile -> zeile.contains("wie")) // nur die Zeilen, die "wie" enthalten
    .count(); // zählen
Um doppelte Zeilen nicht mitzuzählen:
Java:
long anzahl = Files.lines("test.txt") // Aus einem Stream mit Zeilen
    .filter(zeile -> zeile.contains("wie")) // nur die Zeilen, die "wie" enthalten
    .distinct() // und jede nur einmal
    .count(); // zählen
Das verstehe ich aber was wollte dann Die Aufgabe 1 ?
 
Schreiben Sie ein Programm, das drei Parameter bekommt. Der erste Parameter ist eine Eingabedatei, der zweite Parameter ist eine Datei mir Filter-Wörtern (je eins pro Zeile) und der dritte Parameter ist eine Ausgabedatei.

Das Programm soll aus dem Inhalt der Eingabedatei einen KWIC Index erzeugen und diesen in der Ausgabedatei speichern. In dem KWIC Index sollen keine Duplikate vorkommen und alle Rotationen, die mit einem Wort aus der Filter-Wort Datei beginnen sollen entfernt werden.

Sie sollen nicht die Dekomposition nach Parnas aus der Vorlesung verwenden. Benutzen Sie wo immer es geht Java Streams zur Verarbeitung.

Der folgende Code kann verwendet werden, um eine Wort-Liste input um n Worte zu rotieren:

String rotateListByN(int n, List<String> input) {
List<String> a = new ArrayList<>();
a.addAll(input);
Collections.rotate(a, n);
return String.join(" ", a);
}
 
aber der prof hat uns keine wirkichen beispiele gegeben.
Evtl. hat er eine entsprechende Definition des KWIC-Index gegeben. Wie auch immer: wenn Du nicht weißt, wie die Ausgabe aussehen soll, musst Du halt beim Aufgabensteller nachfragen.

Das Wiki-Beispiel zeigt z. B. fett gesetzte Wörter - das geht in Textdateien schlecht. Und was soll als Index ausgegeben werden? Für die Seitennummer müsstest Du erst einmal wissen, wie viele Zeilen auf eine Seite passen. Also eher ungünstig. Die Zeilennummer wäre denkbar. Solche Anforderungen müssen (ggf. auf Nachfrage) geklärt sein.
 
Evtl. hat er eine entsprechende Definition des KWIC-Index gegeben. Wie auch immer: wenn Du nicht weißt, wie die Ausgabe aussehen soll, musst Du halt beim Aufgabensteller nachfragen.

Das Wiki-Beispiel zeigt z. B. fett gesetzte Wörter - das geht in Textdateien schlecht. Und was soll als Index ausgegeben werden? Für die Seitennummer müsstest Du erst einmal wissen, wie viele Zeilen auf eine Seite passen. Also eher ungünstig. Die Zeilennummer wäre denkbar. Solche Anforderungen müssen (ggf. auf Nachfrage) geklärt sein.
ich zeige dir mal was mein prof im Skript stehen hat hahah

11868
 
Ja. Mal für eine Zeile: erstelle eine Wortliste L := (w_0, w_1, ..., w_n). Betrachte diejenigen i, für die gilt: w_i ist nicht in der Filter-Wort-Datei enthalten und rotiere die Liste um i nach links.

Das machst Du für alle Zeilen, dann entfernst Du die Duplikate, sortierst das Ergebnis und gibst es aus.

Beispiel: die Filter-Wort-Datei enthalte die Wörter FÜR, DIE, SIND

Eingabe:
VERWENDE FÜR DIE LÖSUNG STREAMS
STREAMS SIND DOKUMENTIERT

1. Zeile:

L_0 = (w_0, w_1, w_2, w_3, w_4) = (VERWENDE, FÜR, DIE, LÖSUNG, STREAMS)

I := {i aus [0, 4] für die gilt: w_i ist kein Element aus Filter-Wort-Datei} = {0, 3, 4}

Für jedes i aus I: rotiere die Liste um i nach links:
i = 0: L_00 = VERWENDE FÜR DIE LÖSUNG STREAMS
i = 3: L_01 = LÖSUNG STREAMS VERWENDE FÜR DIE
i = 4: L_02 = STREAMS VERWENDE FÜR DIE LÖSUNG

2. Zeile:

L_1 = (w_0, w_1, w_2) = (STREAMS, SIND, DOKUMENTIERT)
I := {i aus [0,2] für die gilt: w_i ist kein Element aus Filter-Wort-Datei} = {0, 2}

Für jedes i aus I: rotiere die Liste um i nach links:
i = 0: L_10 = STREAMS SIND DOKUMENTIERT
i = 2: L_11 = DOKUMENTIERT STREAMS SIND

Zwischenstand: L_00, L_01, L_02, L_10, L_11.
Nach dem Entfernen von Duplikaten: L_00, L_01, L_02, L_10, L_11 (weil es gibt keine Duplikate gibt, keine Änderung)
Alphabetisch sortieren: L_11, L_01, L_10, L_02, L_00
Ausgabe:
DOKUMENTIERT STREAMS SIND
LÖSUNG STREAMS VERWENDE FÜR DIE
STREAMS SIND DOKUMENTIERT
STREAMS VERWENDE FÜR DIE LÖSUNG
VERWENDE FÜR DIE LÖSUNG STREAMS
 
Die flatMap Methode aus Streams könnte ebenso hilfreich sein, wie IntStream.range(…). Einen String können Sie mit der split Methode in Worte zerlegen.

Steht noch als "important" bei der Aufgabe.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben