in Textfile Textphrase ersetzen

Status
Nicht offen für weitere Antworten.

magic_halli

Bekanntes Mitglied
Hi,

ich gehe ein Textfile zeilenweise durch. Wenn dann eine Zeile eine gewisse Textphrase enthält, möchte ich genau diese Textphrase durch einen anderen Text ersetzen.

Code:
String sName="Textphrase";
String ersetzen = "ersetzt";

BufferedReader buff = new BufferedReader(new FileReader(path + "relations.txt"));
while ( (String line = buff.readLine()) != null) {
     if(line.toLowerCase().contains(sName)){
          //sName im Textfile durch 'String ersetzen' ersetzen	
     }
Mh, ich hab schon verschiedene Sachen probiert, aber das war alles nichts :cry:

Wie könnte ich das lösen?

Danke und Gruß.
 

tfa

Top Contributor
Siehe java.lang.String.replaceFirst(String regex, String replacement), oder wahlweise auch replaceAll(...), wenn mehr als ein Auftreten ersetzt werden soll.
 

The_S

Top Contributor
aber aufpassen, replaceAll interpretiert deine Textphrase als Pattern! Wenn die Phrase jetzt z. B. ein Punkt ist, dann musst du diesen deshalb escapen.
 

magic_halli

Bekanntes Mitglied
Omg, natürlich...
Aber wann wird die Änderung für mich sichtbar? ...wenn ich mittels BufferedWriter die Zeile, in der ersetzt wurde, wieder in Textfile zurückschreibe, oder?!
 

tfa

Top Contributor
magic_halli hat gesagt.:
Omg, natürlich...
Aber wann wird die Änderung für mich sichtbar? ...wenn ich mittels BufferedWriter die Zeile, in der ersetzt wurde, wieder in Textfile zurückschreibe, oder?!

Ja. Du musst auch beachten, dass replace einen neuen String zurückliefert und nicht etwa den alten verändert (Strings sind unveränderbar), also z.B.:

Code:
 line=line.replaceFirst( pattern, ersetzen);
 output.println(line)
 

magic_halli

Bekanntes Mitglied
Du musst auch beachten, dass replace einen neuen String zurückliefert und nicht etwa den alten verändert
Also heißt das, dass ich erst die Textphrase ersetzen muss, dann die alte Zeile löschen und die neue veränderte Zeile komplett zurückschreiben muss?
Wenn dem so ist, weiß ich nicht, wie ich das kann. :oops:
 

tfa

Top Contributor
Du erzeugst einfach eine neue Datei, in der die (veränderten) Zeilen reingeschrieben werden. Die alte Datei wird nur gelesen. Am Ende kannst Du sie löschen oder als Sicherheitskopie umbenennen und gibst der neu erzeugten Datei den Namen der alten.
 

magic_halli

Bekanntes Mitglied
So, ich hab jetzt die Sache soweit vorangetrieben, dass ich auf jeden Fall ein neues Textfile erzeuge. Darin sind alle Zeilen enthalten - die unveränderten sowieso und normalerweise sollten auch die veränderten Zeilen drin sein. Sind sie aber nicht! Sobald mein Programm in die Stelle springt, wo etwas ersetzt werden soll, geht die Abarbeitung irgendwie nicht mehr weiter!
Ich weiß nicht, woran das liegt!
Zur Erklärung: Ich gehe das TExtfile zeilenweise durch und wenn in einer Zeile eine Textphrase mit irgend einem KeyWert aus einer ArrayList übereinstimmt, soll diese Textphrase durch den entsprechenden ValueWert aus der ArrayList ersetzt werden.
Code:
ArrayList alParams = getParameters(sParam, model);
String line ="";
BufferedReader buff = new BufferedReader(new FileReader(path + "relations.txt"));

    	    //jede Zeile der Textdatei durchgehen
    	    while ( (line = buff.readLine()) != null) {
    	    		//hier die Strings mit den entspr. Werten aus ArrayList ersetzen
    	    		Iterator iter = alParams.iterator();
    	    		while(iter.hasNext()){
    	    			MyParameters data = (MyParameters) iter.next();
    	    			String sName = data.get_sParam();
    	    			String sValue = data.get_sParamValue();
    	    		    if( line.toLowerCase().contains(sName) == true ){
    	    		    	line = line.replaceAll(sName, sValue);
    	    		        strBuffer.append(line + "\n");
    	    		    }
    	    		}
    	    }
    	    //löscht evtl. exist. Textfile, bevor es neu gefüllt wird
     		File f = new File(path + "relations_changed.txt");
    		if(f.exists()){
    			f.delete();
    		}
    		//schreibt verändertes Orginalfile in neues Textfile 
    	    BufferedWriter buff2 = new BufferedWriter(new FileWriter(path + "relations_changed.txt"));
    	    buff2.write(strBuffer.toString());
    	    buff2.close();
Die ArrayList ist korrekt gefüllt!
Wenn ich die 2.while-Schleife (inkl. darin enthaltener if-Bedingung) auskommentiere und dafür bspw. das schreibe:
Code:
line = line.replaceAll("A", "B");
strBuffer.append(line + "\n");
...dann wird jedes 'A' durch ein 'B' ersetzt!
Nur wenn ich eben den Vergleich mit den ArrayList-Einträgen reinbringe, dann gehts nicht. Ich weiß nicht woran das liegt!
schreibe, dann ???:L

Sehr ihr vielleicht nen Fehler?
 
S

SlaterB

Gast
line.toLowerCase() wird nie ein "A" enthalten,
wenn man also von deinem Beispiel "A" darauf schließen kann, dass deine Parameter ein "A" enthalten, dann sieht es für deinen Code übel aus,
überhaupt: wieso prüfst du mit toLowerCase(), ersetzt dann aber in der normalen Zeile?
macht das Sinn?
 

magic_halli

Bekanntes Mitglied
@SlaterB: Yep, hast Recht. Habe das .toLowerCase() überall entfernt.

Trotzdem funktionierts nicht, eine Textphrase in einer Zeile durch einen entsprechenden ArrayList-Eintrag zu ersetzen. Mein Code sieht jetzt eigentlich total simpel aus. Jedoch wird kein neues (verändertes) Textfile erzeugt, geschweige denn irgendwas ersetzt!
Code:
ArrayList alParams = getParameters(sParam, model);
String line ="";
BufferedReader buff = new BufferedReader(new FileReader(path + "relations.txt"));

    	    //jede Zeile der Textdatei durchgehen
    	    while ( (line = buff.readLine()) != null) {

    	    		Iterator iter = alParams.iterator();
    	    		while(iter.hasNext()){
    	    			MyParameters data = (MyParameters) iter.next();
    	    			String sName = data.get_sParam();
    	    			String sValue = data.get_sParamValue();
    	    		    if( line.contains(sName) == true ){
    	    		    	JOptionPane.showMessageDialog(null, "Zeile enthält ArrayList-Eintrag" +sName);
    	    		    	line = line.replaceAll(sName, "ersetzt");
    	    		    	strBuffer.append("ersetzt:" + line + "\n");
    	    		    }
    	    		}
    	    		strBuffer.append("nicht ersetzt: " + line + "\n");
    	    }
    	    //löscht evtl. exist. Textfile, bevor es neu gefüllt wird
     		File f = new File(path + "relations_changed.txt");
    		if(f.exists()){
    			f.delete();
    		}
    		//schreibt verändertes Orginalfile in neues Beziehungsfile (für import verwendet) 
    	    BufferedWriter buff2 = new BufferedWriter(new FileWriter(path + "relations_changed.txt"));
    	    buff2.write(strBuffer.toString());
    	    buff2.close();
Komisch is halt auch, dass ich nie das Mitteilungsfenster ( JOptionPane.showMessageDialog(null, "Zeile enthält ArrayList-Eintrag" +sName); ) , welches in der inneren if-Bedingung ausgegeben werden soll, zu sehen bekomme. Irgendwie wird hier gar nicht reingegangen?!
Ich seh einfach den Fehler nicht! ???:L
 
S

SlaterB

Gast
so, da gehts nun ab:
Test-Textdatei auf eine Zeile kürzen,
Test-Parameterliste auf einen Parameter kürzen,

und dann schreibe doch mal hin:
System.out.println("line ist: "+line);
System.out.println("sName ist: "+sName);
System.out.println("bin ich schon drin?: "+line.contains(sName));
 

magic_halli

Bekanntes Mitglied
Aha, ich hab die Modifizierungen an der Textdatei und der Test-Parameterliste vorgenommen und jetzt die Testausgaben eingefügt (Auszug):
Code:
...
Iterator iter = alParams.iterator();
    	    		while(iter.hasNext()){
    	    			JOptionPane.showMessageDialog(null,"line ist: "+line);
    	    			MyParameters data = (MyParameters) iter.next();
    	    			String sName = data.get_sParam();
    	    			String sValue = data.get_sParamValue();

    	    		    JOptionPane.showMessageDialog(null, "alParams-String= "+sName + " alParams-double" + sValue);
    	    		    JOptionPane.showMessageDialog(null, "Bin ich schon drin="+line.contains(sName));
                            if( line.contains(sName) == true ){
...
...und siehe da: Die ersten beiden MessageFenster bekomme ich mit den jeweiligen Werten korrekt angezeigt. Doch das 3. Fenster ("Bin ich schon drin" usw.) wird mir NICHT angezeigt!
Irgendwie hat´s da irgendwas mit dem line.contains - so meine Vermutung - nur was?!
 
S

SlaterB

Gast
try {
// dein Code
} catch (Exception e) {
e.printStackTrace();
}

wenn du natürlich kein System.out hast sondern so komische Dialoge verwendest,
dann ist programmieren schwer, was ist das denn für eine Umgebung?
 

magic_halli

Bekanntes Mitglied
was ist das denn für eine Umgebung?
Ich programmiere für ein techn. Konstruktionsprogramm (PRO/Engineer) mittels einer eigenen Java-Schnittstelle (sog. Jlink).
Ich kann den Code nur im geöffneten Programm mittels eigenem Button, hinter dem die Programmfunktionalität liegt, starten. System.out.println etc. bringen hierbei leider nichts. Ich muss sowas über diese Messagefenster anzeigen lassen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Textfile mit StringTokenizer einlesen und sortiert ausgeben Java Basics - Anfänger-Themen 8
F Textfile auslesen und durchsuchen Java Basics - Anfänger-Themen 13
N User Eingabe mit Zeile aus TextFile vergleichen Java Basics - Anfänger-Themen 13
D Textfile lesen/schreiben abhängig vom inhalt Java Basics - Anfänger-Themen 6
A Textfile wird nur unvollständig eingelesen Java Basics - Anfänger-Themen 4
M Import Unicode Textfile Java Basics - Anfänger-Themen 10
L Textfile mit BufferReader einlesen Java Basics - Anfänger-Themen 4
A Textfile verarbeiten. Java Basics - Anfänger-Themen 15
M textfile mit java auslesen Java Basics - Anfänger-Themen 4
mwildam Textfile lesen und schreiben - so viele Möglichkeiten Java Basics - Anfänger-Themen 5
M if-else-endif in Textfile erkenne Java Basics - Anfänger-Themen 8
M in Textfile Strukturen erkennen Java Basics - Anfänger-Themen 5
M Textfile durchlaufen und ersetzen Java Basics - Anfänger-Themen 2
P Textfile einlesen Java Basics - Anfänger-Themen 8
S Ringbuffer-Speicher mit einem Textfile Java Basics - Anfänger-Themen 2
H Mit JSP in ein Textfile schreiben Java Basics - Anfänger-Themen 2
H Header von Textfile bearbeiten Java Basics - Anfänger-Themen 14
G Stringmaipulation, Textfile einelsen und Suchen und Ersetzen Java Basics - Anfänger-Themen 12
M Textfile in einer JTextArea anzeigen Java Basics - Anfänger-Themen 3
R Textfile vs Serialized Objects Java Basics - Anfänger-Themen 4
A Abspeichern von werten in einer textfile. Java Basics - Anfänger-Themen 2
G wie 'tabs' und 'zeilenumbruch' in textfile einbauen? Java Basics - Anfänger-Themen 5
G Textfile bearbeiten und speichern Java Basics - Anfänger-Themen 3
W Gleichzeitiges ersetzen mehrerer Strings Java Basics - Anfänger-Themen 7
I Frage Thymeleaf -> Fehler ignorieren und mit "" ersetzen? Java Basics - Anfänger-Themen 15
A 1 Leerzeichen durch zwei Leerzeichen ersetzen Java Basics - Anfänger-Themen 4
A JTextArea entfernen und durch neuen Text ersetzen Java Basics - Anfänger-Themen 8
obiwanke Ziffern durch ASCII Character ersetzen Java Basics - Anfänger-Themen 8
C In String, Buchstaben ersetzen durch andere Buchstaben Java Basics - Anfänger-Themen 26
C if-Konstrukt durch switch-Konstrukt ersetzen Java Basics - Anfänger-Themen 14
W Best Practice Tabulatoren verschiedener Länge ersetzen Java Basics - Anfänger-Themen 8
I String ersetzen, der Inhalt enthält Java Basics - Anfänger-Themen 4
T Zahl in Array ersetzen Java Basics - Anfänger-Themen 2
D Input/Output fehlerhafter Algorithmus zum Ersetzen von Array-Werten nach logischem Schema Java Basics - Anfänger-Themen 1
N for Schleife durch Rekursion ersetzen Java Basics - Anfänger-Themen 6
B Alle Links in einem Text suchen und ersetzen mit einem neuen Link Java Basics - Anfänger-Themen 18
V Erste Schritte Vokale im Satz ersetzen Java Basics - Anfänger-Themen 20
S Ersetzen eines Asterix in einem String Java Basics - Anfänger-Themen 8
ruutaiokwu Ausgegebene Zeile ersetzen mit neuem Text Java Basics - Anfänger-Themen 3
CptK Interface Curser durch Bild ersetzen & MouseListner Java Basics - Anfänger-Themen 2
S Wort suchen und ersetzen in einer Datei Java Basics - Anfänger-Themen 6
W Teilstring durch Teilstring mittels StringBuilder ersetzen Java Basics - Anfänger-Themen 7
J Kopierte Datei soll alte ersetzen. Java Basics - Anfänger-Themen 6
K BufferedReader für IOTools ersetzen? Java Basics - Anfänger-Themen 17
Jinnai4 Strings ersetzen Java Basics - Anfänger-Themen 9
G Wert in Textdatei ersetzen? Java Basics - Anfänger-Themen 2
C char in String suchen und durch anderen String ersetzen Java Basics - Anfänger-Themen 2
M 2 Stellen in einem Array vergleichen und bei übereinstimmen eine davon ersetzen Java Basics - Anfänger-Themen 1
F In LinkedList einen Wert ersetzen oder neu einfügen Java Basics - Anfänger-Themen 7
Alex/89 String in einer txt ersetzen Java Basics - Anfänger-Themen 15
B Greenscreen (grüner Hintergrund ersetzen mit Bild) Java Basics - Anfänger-Themen 49
E RTF/DOC(x) textteile ersetzen/verändern Java Basics - Anfänger-Themen 0
K ArrayList durch ArrayList ersetzen Java Basics - Anfänger-Themen 5
T Strings ersetzen mit \ Java Basics - Anfänger-Themen 10
A Suchen und ersetzen Java Basics - Anfänger-Themen 13
Lord.Djerun (Taschenrechner Netbeans) Komma nur einmal schreiben & 0 ersetzen Java Basics - Anfänger-Themen 1
A Text mit "Scanner" eingeben und Umlaute ersetzen Java Basics - Anfänger-Themen 7
hello_autumn Strings ersetzen... Java Basics - Anfänger-Themen 10
S Wort in Text suchen und ersetzen Java Basics - Anfänger-Themen 3
G Ersetzen eines confirm dialogs/ synchronisieren von methoden Java Basics - Anfänger-Themen 6
T Best Practice JUnit: Wie Klassen durch Stubs/Mockups ersetzen Java Basics - Anfänger-Themen 7
J Ersetzen Java Basics - Anfänger-Themen 4
Ananaskirsche Input/Output Platzhalter durch String in yml-Datein ersetzen Java Basics - Anfänger-Themen 5
AssELAss ß durch ss oder SS ersetzen Java Basics - Anfänger-Themen 10
J Input/Output String Suchen und Ersetzen Java Basics - Anfänger-Themen 8
M nach Typenkonvertierung Leerzeichen ersetzen Java Basics - Anfänger-Themen 2
G Line Separator in ArrayList durch ";" ersetzen Java Basics - Anfänger-Themen 4
L Wort in String ersetzen Java Basics - Anfänger-Themen 11
N Java Programm zum Suchen und Ersetzen von Text Dateien Java Basics - Anfänger-Themen 10
F Hexfolge in Byte Array ersetzen Java Basics - Anfänger-Themen 8
J Vokale ersetzen Java Basics - Anfänger-Themen 7
G GUI Label Werte ersetzen Java Basics - Anfänger-Themen 25
G String ersetzen Java Basics - Anfänger-Themen 5
G GUI JLabel ersetzen Java Basics - Anfänger-Themen 3
X String einzelne Buchstaben ersetzen Java Basics - Anfänger-Themen 4
C Variablen Variablen ersetzen Java Basics - Anfänger-Themen 7
Kenan89 Bestimmte Zeile in txt-Datei ersetzen Java Basics - Anfänger-Themen 4
D Slash durch zwei Backslash ersetzen Java Basics - Anfänger-Themen 11
S Button durch ImageIcon ersetzen Java Basics - Anfänger-Themen 9
C Elemente im StringBuffer ersetzen Java Basics - Anfänger-Themen 19
S im StringBuilder Zeichenketten ersetzen Java Basics - Anfänger-Themen 6
A String ersetzen Java Basics - Anfänger-Themen 6
B Char in String ersetzen Java Basics - Anfänger-Themen 15
J Alle Vorkommen eines chars in einem Array durch einen anderen char ersetzen Java Basics - Anfänger-Themen 10
I Ersetzen eines Objektes in einer Liste? Java Basics - Anfänger-Themen 5
A Datentypen Sonderzeichen / Strings ersetzen Java Basics - Anfänger-Themen 3
A Vokale im String ersetzen Java Basics - Anfänger-Themen 12
S Objekt durch Schnittstelle ersetzen Java Basics - Anfänger-Themen 2
F Substring mittels RegEx ermitteln/ersetzen? Java Basics - Anfänger-Themen 2
K Ersetzen von Teilstrings in ArrayList von Strings Java Basics - Anfänger-Themen 11
S Datentypen In mehreren Dateien Strings ersetzen Java Basics - Anfänger-Themen 14
A Doppelter Backslash durch einen einfachen Backslash ersetzen Java Basics - Anfänger-Themen 6
T Doppelte Anführungszeichen ersetzen?? Java Basics - Anfänger-Themen 4
B Vector in Table ersetzen Java Basics - Anfänger-Themen 4
J Große animierte Gif preloaden und solange mit einer nicht animierten ersetzen Java Basics - Anfänger-Themen 5
Daniel_L RegEx - Ersetzen ausschließen? Java Basics - Anfänger-Themen 6
S .txt einlesen->Zeilen ersetzen->neu.txt speichern Java Basics - Anfänger-Themen 13
S Backslash ersetzen. Java Basics - Anfänger-Themen 5
D mehrere Leerzeichen durch 1 Leerzeichen ersetzen Java Basics - Anfänger-Themen 3
M Panel ersetzen funktioniert nicht Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben