meine Frage bezieht sich auf den String "case2" im Folgenden Code.
A;B;C;D;E
A;B;C;D;E
A;B;C;D;E
-case2 ist ein 3 zeiliger String getrentt mit \n
-Jede Zeile hat Werte getrennt mit einem ;
Man könnte sich das als eine Tabelle mit 3 Zeilen und 5 Spalten vorstellen.
Aufgabe: Lösche die 2 Spalte
Beim Anwenden von Regex auf case2 ist aktuell immer die letzte Zeile betroffen.
Wie kann ich aber den gesamten String (=Multiple Line) den RegEx anwenden.
Am Ende möchte ich folgendes Ergebnis haben.
A;C;D;E
A;C;D;E
A;C;D;E
Das ist der aktuelle Code:
Java:
package main;publicclassCsvColumnRemoverTest{publicstaticvoidmain(String[] args){String case1 ="A;B;C;D;E";String case2 ="A;B;C;D;E"+"\n";
case2 +="A;B;C;D;E"+"\n";
case2 +="A;B;C;D;E";// ------------------------------------------------------------------------------ System.out.println("#Before");System.out.println(case1);System.out.println();System.out.println(case2);// replacement
case1 = case1.replaceAll("([^<]*);([^<]*);([^<]*);([^<]*);([^<]*)","$1;$3;$4;$5");
case2 = case2.replaceAll("([^<]*);([^<]*);([^<]*);([^<]*);([^<]*)","$1;$3;$4;$5");// <= what do I need to add here, so that all lines are processed // ------------------------------------------------------------------------------ System.out.println();System.out.println("#After");System.out.println(case1);System.out.println();System.out.println(case2);}}
String s ="A;B;C;D;E\n"+"A;B;C;D;E\n"+"A;B;C;D;E";System.out.println("s = "+ s);System.out.println("");
s = s.replaceAll("(.*\\n)(.*\\n)(.*)","$1$3");// reps second rowSystem.out.println("s = "+ s);System.out.println("");
s ="A;B;C;D;E\n"+"A;B;C;D;E\n"+"A;B;C;D;E";
s = s.replaceAll("(.*;)(.*;)(.*;)(.*;)(.*)","$1$3$4$5");// reps second columnSystem.out.println("s = "+ s);System.out.println("");
DerWissende: vielen Dank, das genau habe ich gesucht.
>> Du hast keine andere Chance, wenn du unbedingt mit #replaceAll() hantieren willst/musst.
Mir geht es darum, dass ich keine zeit-intensive Schleifen anwende.
Deine Hilfestellung oben ist genau das was ich gesucht habe.
Wenn Du magst und und Zeit hast, würde ich mir Deine alternative Möglichkeit kurz beschreiben lassen wollen.
Naja, normalerweise würd man Zeile-für-Zeile und Spalte-für-Spalte einlesen. Das ist auch nicht rechen-intensiv.
Bei replaceAll muss man mit ^, $ und . (matcht nicht Zeilenende usw.) usw. aufpassen. Diese meta Zeichen werden anders gehandhabt. replaceAll erwartet einen anderen RegEx als z. B. Pattern. Warum das so ist, eigentlich hab ich da kA.
Wird bestimmt noch jemand am genausten erklären. Erst mal sollte man 'ne Runde chillen. ;D