Jede x-te Zeile, lösche 10 Zeilen

at0m

Mitglied
Hallo zusammen,

ich habe eine kleine Aufgabe zu lösen und stehe momentan auf dem Schlauch, obwohl es sich grundsätzlich recht einfach anhört.
Und zwar lese ich mehrere Dateien ein, verbinde sie zu einer und muss in der Enddatei an jeder x-ten Zeile, y Zeilen löschen. Die Benutzerabfrage, das Einlesen und Mergen der Datei funktioniert tadellos (den Code füge ich mal nicht ein, da er für das konkrete Problem irrelevant ist) aber das Löschen der Zeilen bereitet mir Kopfzerbrechen.

Hier ist was ich bereits habe:
Java:
// Initialisierte Liste "lines" mit den Zeilen wird
// hier kopiert. Die zu löschenden Zeilen sollen aus
// der ArrayList "cleanLines" gelöscht werden.
ArrayList<String> cleanList = new ArrayList<>(lines);
int i = 0;
while (i < lines.size()) {
    // x ist der vom Benutzer eingegebene Wert für x
    if (i == Integer.parseInt(x)) {
        // y ist der vom Benutzer eingegebene Wert für y
        for (int j = 0; j < Integer.parseInt(y); j++) {
            cleanList.remove(i);
        }
    }
    i++;
}
// schreibe die ArrayList in eine Datei (funktioniert)
writeLinesToFile(cleanList);

Das funktioniert leider nur beim ersten Durchlauf. Kann mir jemand auf die Sprünge helfen, wie man die Schleife erweitern müsste, damit der Loop nicht nur einmalig Auswirkungen auf die Datei hat?

Würde mich sehr freuen. Vielen Dank im Voraus!
 

sascha-sphw

Top Contributor
Du löscht ja nicht an jeder x-ten Zeile, sondern nur an Zeile x.
Jede x-te Zeile wäre
Java:
if(i % Integer.parseInt(x) == 0)
 

sascha-sphw

Top Contributor
Das ist jetzt die Frage, habe ich Dich richtig verstanden oder nicht.

Nehmen wir an wir haben x = 3 und y = 2
Deine Bedingung führt dann zu.
Zeile 1
Zeile 2
Zeile 3
Zeile 4
Zeile 5

Zeile 6
Zeile 7
Zeile 8
Zeile 9
Löscht insgesammt nur 2 Elemente.

Die Bedingung mit Modulo macht folgendes.
Zeile 1
Zeile 2

Zeile 3
Zeile 4
Zeile 5

Zeile 6
Zeile 7
Zeile 8

Zeile 9
Löscht also immer da wo durch 3 geteilt werden kann.

Und wenn man jetzt noch den Index zur Zeilennummer normalisiert, dann sieht das so aus.
Java:
if (i+1 % Integer.parseInt(x) == 0)
Zeile 1
Zeile 2
Zeile 3
Zeile 4

Zeile 5
Zeile 6
Zeile 7

Zeile 8
Zeile 9
 

sascha-sphw

Top Contributor
Aber den Unterschied zwischen
Java:
if(i % Integer.parseInt(x) == 0)
und
Java:
if(i == Integer.parseInt(x))

erkennst Du schon, oder?
 

at0m

Mitglied
Aber den Unterschied zwischen
Java:
if(i % Integer.parseInt(x) == 0)
und
Java:
if(i == Integer.parseInt(x))

erkennst Du schon, oder?

Jep, den erkenne ich. ;)

Ich habe vor folgendes zu machen. x = 4, y = 2

1
2
3
4
5

6
7
8
9
10

11
12
usw.

Also alle vier Zeilen werden zwei Zeilen gelöscht.
Meine Anweisung führt dies zwar durch, jedoch leider nur einmalig, sprich im Beispiel würde nur die 4 und 5 gestrichen werden. Irgendwie kommt ich da nicht weiter...
 

sascha-sphw

Top Contributor
Aber dann habe ich Dir die Lösung des Problems doch bereits geliefert. Hast Du die Bedingugn denn mal versucht?
Java:
// Initialisierte Liste "lines" mit den Zeilen wird
// hier kopiert. Die zu löschenden Zeilen sollen aus
// der ArrayList "cleanLines" gelöscht werden.
ArrayList<String> cleanList = new ArrayList<>(lines);
int i = 0;
while (i < lines.size()) {
    // x ist der vom Benutzer eingegebene Wert für x
    if (i+1 % Integer.parseInt(x) == 0) {
        // y ist der vom Benutzer eingegebene Wert für y
        for (int j = 0; j < Integer.parseInt(y); j++) {
            cleanList.remove(i);
        }
    }
    i++;
}
// schreibe die ArrayList in eine Datei (funktioniert)
writeLinesToFile(cleanList);

Edit: Mein Fehler, ich erkenne das Problem. Wenn Du die Elemente löscht, verschiebt sich ja der Index. Lösung wäre, das ganze rückwärts zu machen. aber dennoch mit der Modulo Bedingung.
 

mihe7

Top Contributor
Oder eben nicht löschen:
Java:
ArrayList<String> cleanList = new ArrayList<>();
int xth = Integer.parseInt(x);
int i = 0;
int n = lines.size();
while (i < n) {    
    if ((i+1) % xth == 0) {
        i += y;
    } else {
        cleanList.add(list.get(i));
        i++;
    }
}
writeLinesToFile(cleanList);
 
K

kneitzel

Gast
Also da sollte man sich erst einmal einen Pseudo-Code überlegen, wie man das lösen könnte. Ich sehe hier mehrere Möglichkeiten. Eine Möglichkeit wäre, da alles mit mathematischen Berechnungen zu machen. Das geht relativ gut, denn dazu muss man sich nur überlegen, wie das Vorgehen ist:
Kurze Klärung:
Wir haben eine Liste mit Elementen. Alle x Elemente sollen y Elemente gelöscht werden:
Also bei x = 4 ,y =2: wäre 1, 2, 3, (4), (5), 6, 7, 8, (9), (10), ...
6, 7, 8 werden somit zum 4, 5, und 6 ten element, wenn 4 und 5 gelöscht werden.

Somit könnte man einen folgenden Pseudo Code schreiben:
- zeiger = x
- Solange zeiger < Größe der Liste:
---> Lösche die nächsten y Elemente so diese vorhanden sind.
---> zeiger = zeiger + x

Da muss man dann nichts mehr berechnen oder so.

Oder statt die Liste am Anfang zu kopieren und dann Elemente zu löschen:
- Zeiger = 0.
- zaehler = 0
- Solange zeiger < Größe OriginalListe
---> zaehler um eins erhöhen
---> falls zaehler größer x + y dann zaehler = 1
---> falls zaehler kleiner oder gleich x dann kopiere zeiger-Element aus alter Liste in neue Liste.
---> zeiger um eins erhöhen

Dann würde man nur die Element kopieren, die kopiert werden müssten.

Und das alles mit minimaler Mathematik, was den Code aus meiner Sicht einfacher verständlich macht.

Edit: Die Einrückung mit Leerzeichen hat er nicht genommen, daher habe ich die Einrückung nun mit ----> deutlich gemacht.
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
A InputStream gibt nur jede 2te Zeile aus Java Basics - Anfänger-Themen 7
J Jede Zeile der Textdatei in ListUI eintragen Java Basics - Anfänger-Themen 2
Developer_X jede Zeile einer Datei mit einem String verketten Java Basics - Anfänger-Themen 16
S PrepareStatement, jede neue Zeile INT-Wert Java Basics - Anfänger-Themen 5
G jede 2te zeile in vector leer einfügen, wie? Java Basics - Anfänger-Themen 4
N Aus Textdatei jede Zeile in einen String lesen Java Basics - Anfänger-Themen 22
berserkerdq2 Spiel hängt sich immer in der 4 Runde auf, obwohl ich jede Runde das gleiche mache Java Basics - Anfänger-Themen 1
D Ampel Programmieren die jede 10 sekunden ihre farbe wechselt Java Basics - Anfänger-Themen 6
B Methode für jede beliebe Entity erstellen Java Basics - Anfänger-Themen 7
L Jede zweite Ziffer entfernen (rekursiv) Java Basics - Anfänger-Themen 6
S Jede Ziffer einer Zahl auslesen, damit rechnen und beim Ergebnis wiederholen ? Java Basics - Anfänger-Themen 20
M Primzahlen, nur jede 2te ausgeben Java Basics - Anfänger-Themen 11
V Ein Wort einlesen und dann jede Buchstabe ausgeben Java Basics - Anfänger-Themen 10
M Threads Jede Klasse einem Thread zuweisen Java Basics - Anfänger-Themen 7
K Mit Scanner aus einer txt Datei lesen und jede Person mit name, vorname, geburtsdatum speichern Java Basics - Anfänger-Themen 5
U Farbe meines Würfels jede sekunde ändern! Java Basics - Anfänger-Themen 5
W Erste Schritte Timer soll jede Sekunde Label aktualisieren Java Basics - Anfänger-Themen 5
R JLabel imageicon jede Sekunde wechseln Java Basics - Anfänger-Themen 3
S Jede Reihenfolge einer zufällig langen Liste ausprobieren Java Basics - Anfänger-Themen 3
J Eine int Variable jede Sekunde um 1 hocnzählen Java Basics - Anfänger-Themen 3
T Zufalls jedoch jede nur einmal Java Basics - Anfänger-Themen 10
K Swing Fenster jede sec.neuzeichnen Java Basics - Anfänger-Themen 14
J Ein Wort einlesen und dann jede Buchstabe ausgeben Java Basics - Anfänger-Themen 25
N jede Zwanzigste... ? Java Basics - Anfänger-Themen 12
E Jede Objektart in Mutterelement erlauben? Java Basics - Anfänger-Themen 3
E Klassendesign: Array für jede Objektart?! Java Basics - Anfänger-Themen 6
W Die Methode print() wird 2 mal für jede Seite aufgerufen Java Basics - Anfänger-Themen 9
F 2DArray jede Spalte Addieren Java Basics - Anfänger-Themen 8
G Datum und Text in jede beliebige Anwendung einfügen Java Basics - Anfänger-Themen 3
U Jede Sekunde Java Basics - Anfänger-Themen 6
M Braucht jede Klasse eine Schnittstelle ? Java Basics - Anfänger-Themen 4
M Jede Variable als private, protected etc. deklarieren? Java Basics - Anfänger-Themen 7
Glühlampe Usereingabe in der gleichen Zeile ausgeben Java Basics - Anfänger-Themen 6
Ü Zweidimensionales Array in der ersten Zeile deklarieren Java Basics - Anfänger-Themen 13
padde479 Zeile entfernen TableModel Java Basics - Anfänger-Themen 11
F Arraylist<String>Ein Wort pro Zeile Java Basics - Anfänger-Themen 6
G Compiler-Fehler Fehler in Zeile 1 beheben, wie? Java Basics - Anfänger-Themen 9
I Wortkette in umgekehrter Rheinfolge + in neuer Zeile ausgeben Java Basics - Anfänger-Themen 4
W String einer Textdatei in einzelne Stringobjekte pro Zeile aufteilen Java Basics - Anfänger-Themen 14
M Spezifischen Wert einer Zeile aus .txt Datei entnehmen Java Basics - Anfänger-Themen 15
AkiJou Zeile in 2d Array löschen Java Basics - Anfänger-Themen 2
LilliCherry Array in einer Zeile ausgeben Java Basics - Anfänger-Themen 6
S Variablen Letzte Zeile eines Strings entfernen Java Basics - Anfänger-Themen 1
LFB In einer For-Schleife alles in einer Zeile ausgeben Java Basics - Anfänger-Themen 14
javapingu Jeglichen Inhalt einer Textdatei nach Zeile n löschen Java Basics - Anfänger-Themen 8
S Zufällige ungerade Zeile aus Text-Datei lesen Java Basics - Anfänger-Themen 5
G JTable, Zeile auswählen und Ergebnis an Schaltfläche übergeben Java Basics - Anfänger-Themen 4
Zwanglos Warum wird nur die erste Zeile im while Block ausgeführt? Java Basics - Anfänger-Themen 8
dieter000 Wie schreibe ich diese ZEile um? Java Basics - Anfänger-Themen 1
crrnogorka Letzte Zeile einer Tabelle "überschreibt" alle anderen Zeilen Java Basics - Anfänger-Themen 1
M In gleicher zeile hinter ausgabe noch etwas ausgeben Java Basics - Anfänger-Themen 1
P Welche Zeile in Tadople gibt einen compiler error? Java Basics - Anfänger-Themen 5
I ArrayList erstellen innerhalb einer Zeile? Java Basics - Anfänger-Themen 3
S Datenbank Tabelle eine Zeile an einer bestimmten Stelle einfügen Java Basics - Anfänger-Themen 2
S Gesamten String in einer Zeile ausgeben Java Basics - Anfänger-Themen 2
J ObjectOutputStream writeChars, komische Zeichen nur in 1. Zeile Java Basics - Anfänger-Themen 2
T Was macht diese Zeile? Java Basics - Anfänger-Themen 9
L Tiefe Kopie einer Zeile eines zweidimensionalen Arrays Java Basics - Anfänger-Themen 1
B Code Zeile unklar Java Basics - Anfänger-Themen 9
ruutaiokwu Ausgegebene Zeile ersetzen mit neuem Text Java Basics - Anfänger-Themen 3
F Zeile in Ordner Java Basics - Anfänger-Themen 4
jaleda100 JTextArea Zeile einfügen Java Basics - Anfänger-Themen 1
M BufferedReader neue Zeile nach Knopfdruck Java Basics - Anfänger-Themen 9
F Mehrere Zeilen zu einer Zeile zusammenfügen und in eine Datei schreiben Java Basics - Anfänger-Themen 1
MaximilianTM Input/Output Einlesen und bearbeiten einer text Datei / Zeile Java Basics - Anfänger-Themen 5
C Java liest nur eine Zeile ein Java Basics - Anfänger-Themen 3
M Aus Datei auslesen und untersuchen ob diese Zeile schon vorhanden ist Java Basics - Anfänger-Themen 3
B Wieso wird die Zeile "column" genannt und die Spalte "line"? Java Basics - Anfänger-Themen 12
S BufferedReader nächste Zeile lesen Java Basics - Anfänger-Themen 4
M Zeile in datei überschreiben Java Basics - Anfänger-Themen 5
S drawString() neue Zeile Java Basics - Anfänger-Themen 4
D Falsche Zeile wird in JTable gelöscht Java Basics - Anfänger-Themen 6
D JTable Zeile wird nicht in MySQL gelöscht Java Basics - Anfänger-Themen 16
J Durchschnitt jeder Zeile und und Spalte in einem 2D Arrays berechnen Java Basics - Anfänger-Themen 6
W String in einer Zeile mit Alphabet füllen? Java Basics - Anfänger-Themen 8
snipesss [Java] Schriftart und Schriftgröße von JLabel in einer Zeile festlegen? Java Basics - Anfänger-Themen 3
H Variablen Zeile aus einem ResultSet ausleesen Java Basics - Anfänger-Themen 7
E Wenn i (for-Loop) bestimmter Wert, dann neue Zeile eines Buttons Java Basics - Anfänger-Themen 7
R Ab einer bestimmten Zeile lesen Java Basics - Anfänger-Themen 3
T Zeilen des ListArray nach einem Wort durchsuchen und diese Zeile ausgeben Java Basics - Anfänger-Themen 4
C Datentypen Zeile aus mehrdimensionalem Array extrahieren uns abspeichern Java Basics - Anfänger-Themen 6
B FileInputStream entpacken und Zeile für Zeile entpacken Java Basics - Anfänger-Themen 1
Crazynet jTable erste Zeile mit deffinierten Werten Java Basics - Anfänger-Themen 0
S Zeile entfernen aus JTable Java Basics - Anfänger-Themen 15
S In JTable Zeile selektieren mit Mausklick Java Basics - Anfänger-Themen 16
D Datenbankzugriff - Leere Zeile einfügen Java Basics - Anfänger-Themen 2
G zeichen einer Zeile löschen Java Basics - Anfänger-Themen 4
F Zeile bei JTable hinzufügen Java Basics - Anfänger-Themen 6
A CSV datei eine Bestimmte Zeile ansprechen Java Basics - Anfänger-Themen 1
J Input/Output Zeile in Textdatei ändern Java Basics - Anfänger-Themen 14
S Java CSV, er nimmt die nächste Zeile nicht Java Basics - Anfänger-Themen 2
A Heap Space Error bei rekursiver Suche in Dateien trotz nur einer Zeile im Speicher Java Basics - Anfänger-Themen 26
G Zeile charweise lesen Java Basics - Anfänger-Themen 3
Ananaskirsche Input/Output Bestimmte Zeile aus Datei einlesen Java Basics - Anfänger-Themen 4
G Leere Zeile lesen Java Basics - Anfänger-Themen 12
G zeile: Was bedeutet das in der Methode? Java Basics - Anfänger-Themen 4
S Farbe eine Zeile in JTable ändern, wenn JButton geklickt wurd Java Basics - Anfänger-Themen 4
T Textdatei Zeile löschen? Java Basics - Anfänger-Themen 4
C Input/Output Hilfe..txt Datei zeile verändern und Ausgabe ..Hilfe Java Basics - Anfänger-Themen 11
N Bestimmte Zeile aus einer Datei auslesen Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben