Akzeptiert das zweite replaceAll nicht

ayoooo

Mitglied
Hallo Freunde bin noch immer an meinem Java Code der alle kommas löschen soll und nur diese "," und diese },{ doch bestehen lassen soll, aber leider erhalte ich ständig die Fehlermeldung, hat jemand einen tip

Java:
   import java.io.*;

   public class converter{
	   
   
   public static void main(String[] args) throws IOException {
	   try {

	        BufferedReader br = new BufferedReader(
	                new FileReader("C:/Users/Sei_Erfolgreich/Desktop/convert.txt"));
	        String zeile;

	        try {
	            File newTextFile = new File("C:/Users/Sei_Erfolgreich/Desktop/convert2.txt");
	            FileWriter fw = new FileWriter(newTextFile);
	            while ((zeile = br.readLine()) != null) {
	                zeile = zeile.replaceAll("\",\"", "\uffff").replaceAll(",",
	                        "").replaceAll("\uffff", "\",\"");
	                System.out.println(zeile);
	                fw.write(zeile);
	            }


	            fw.close();
	        } catch (IOException e) {
	            e.printStackTrace();
	        }
	    } catch (FileNotFoundException e1) {
	        e1.printStackTrace();
	    }
   
   }

wenn ich es ausführe erhalte ich diese Fehlermeldung:"
Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal repetition near index 3
"},"{"

hab mir Reg expressions angeschaut, aber bin daraus nicht schlau geworden, hat jemand vielleicht einen tip?
 
Das Problem ist, dass du eine Klammer öffnest, die du nicht schließt, sofern ich die Sache richtig verstehe.

Ich hab solch ein Problem gehabt, nicht die , zu ersetzen, sondern die geschweifte Klammer als Teil eines variablen Strings.
Habe mir geholfen, sozusagen eine Brücke gebaut, in dem ich zunächst die Klammer per replaceAll(Pattern.quote("{"),"-~") bzw. } nach ~- ersetzt habe. Kannst auch +~ für Klammer auf und -~ für Klammer zu verwenden.
Diese Zeichen lassen sich jederzeit im String verarbeiten und am Ende wieder zurück ersetzen. Hoffe, ich konnte etwas helfen.
 
Ich wollte die ja nur nicht entfernen, da es sich um eine datenbank txt handelt, und wenn ich die kommas zwischen den geschweiften klammern entferne, kann ich es nicht mehr in excel öffnen, bzw die reihentrenner fehlen dann.

Aber danke für den tip
 
Habs mal so probiert

Java:
  .replaceAll("\uffff", "},{")
              .replaceAll("},{", "\uffff");

erhalte aber trotzdem eine fehlermeldung

Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal repetition near index 1
},{
 
habs jetzt mal so probiert

Java:
.replaceAll("\uffff", "},{")
              .replaceAll("},{", "\uffff");


aber das akzeptiert er auch nicht wirft wieder die gleiche fehlermeldung aus
 
Dein Text im Eingang liegt etwa so vor:
{Text1},{Text2}","{Text3},{Text4}

?

Und raus kommen soll

{Text1},{Text2}{Text3},{Text4}


?

[Java]
String in = "{Text1},{Text2}\",\"{Text3},{Text4}";
String out;
out = in.replaceAll("\",\"", "\uffff");

System.out.println("In: "+in);
System.out.println("Out: "+out);
[/code]


Ausgabe:
In: {Text1},{Text2}","{Text3},{Text4}
Out: {Text1},{Text2}￿{Text3},{Text4}

Oder verstehe ich falsch?
 
Bei der ausgabe sieht das genau so aus, nur das die Kommas nach den geschweiften also zwischen denen auch gelöscht werden.

Die mit anführungsstrichen die bleiben bestehen.
 
Statt deine replaceAll´s einfach hintereinander zu klatschen, und dich dann zu wundern, warum das Ergebnis nicht so ist wie erwartet, hättest du dir nach jedem replaceAll das Zwischenergebnis mal anschauen sollen. Dann wäre dir aufgefallen wo du etwas machst, was du gar nicht machen wolltest.
Vielleicht ist das hier ja nützlich:
Java:
public class RegexTest {
    public static void main(String[] args){
        String original = "Test\",\"Test,Test},{";
        System.out.println(original);
        String kopie = original.replaceAll("\\},\\{", "##1##").replaceAll("\",\"", "##2##").replaceAll(",","");
        System.out.println("Alle ',' eliminiert: " + kopie );
        kopie = kopie.replaceAll("##1##","},{").replaceAll("##2##","\",\"");
        System.out.println("Alle Hilfsstrings wieder entfernt: " + kopie );
    }
}
 
Habs übernommen für mein Programm, aber trotzdem löscht der die bei mir wieder

Java:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;


public class FileWrite{
public static void main(String[] args) throws IOException {
	   try {

	        BufferedReader br = new BufferedReader(
	                new FileReader("C:/Users/Sei_Erfolgreich/Desktop/convert.txt"));
	        			String zeile;
	        try {
	            File newTextFile = new File("C:/Users/Sei_Erfolgreich/Desktop/convert3.txt");
	            FileWriter fw = new FileWriter(newTextFile);
	            while ((zeile = br.readLine()) != null) {
	                zeile = zeile.replaceAll("\\},\\{", "##1##").replaceAll("\",\"", "##2##").replaceAll(",","");
	  	              zeile = zeile.replaceAll("##1##","},{").replaceAll("##2##","\",\"");
	  	              System.out.println(zeile);
	                fw.write(zeile);
	            }
	             fw.close();
	        } catch (IOException e) {
	            e.printStackTrace();
	        }
	    } catch (FileNotFoundException e1) {
	        e1.printStackTrace();
	    }
		}
}
 
Habs übernommen für mein Programm, aber trotzdem löscht der die bei mir wieder

Den Ratschlag von Harry Kane hast du bewusst nicht beachtet? Nach jedem replaceAll dir das Ergebnis ausgeben zulassen, damit du siehst was passiert ist?!

Du hast einen Fehler und willst ihn lösen, also versuche so viele Informationen und Zwischenschritte zu machen wie nur möglich und notwenig. Danach kannst du den Code immer noch optimieren!
 
Zuletzt bearbeitet:
Java:
package ayhan;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;


public class FileWrite{
public static void main(String[] args) throws IOException {
	   try {

	        BufferedReader br = new BufferedReader(
	                new FileReader("C:/Users/Sei_Erfolgreich/Desktop/convert.txt"));
	        			String zeile;
	        try {
	            File newTextFile = new File("C:/Users/Sei_Erfolgreich/Desktop/convert3.txt");
	            FileWriter fw = new FileWriter(newTextFile);
	            while ((zeile = br.readLine()) != null) {
	                String kopie = zeile.replaceAll("\\},\\{", "##1##").replaceAll("\",\"", "##2##").replaceAll(",","");
	                kopie = kopie.replaceAll("##1##","},{").replaceAll("##2##","\",\""); 
	               
	  	              System.out.println(kopie);
	                fw.write(kopie);
	            }
	             fw.close();
	        } catch (IOException e) {
	            e.printStackTrace();
	        }
	    } catch (FileNotFoundException e1) {
	        e1.printStackTrace();
	    }
		}
}


Trotzdem löscht das Programm die Kommas zwischen den geschweiften Klammern
 
Java:
	                String kopie = zeile.replaceAll("\\},\\{", "##1##").replaceAll("\",\"", "##2##").replaceAll(",","");
	                kopie = kopie.replaceAll("##1##","},{").replaceAll("##2##","\",\""); 
	               
	  	              System.out.println(kopie);


Trotzdem löscht das Programm die Kommas zwischen den geschweiften Klammern

Schön du hast 5x"replaceAll" .... speicherst 1x einen Zwischenschritt gibst diesen aber nicht aus.
Mach für jedes "replaceAll" eine eigene Zeile und gib das Zwischenergebnis immer aus, so solltest du erkennen bei welchen "replaceAll" der Fehler passiert
 
Habs eben probiert aber führt irgendwie zu nix

Java:
package ayhan;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;


public class FileWrite{
public static void main(String[] args) throws IOException {
	   try {

	        BufferedReader br = new BufferedReader(
	                new FileReader("C:/Users/Sei_Erfolgreich/Desktop/ads.txt"));
	        			String zeile;
	        try {
	            File newTextFile = new File("C:/Users/Sei_Erfolgreich/Desktop/convert4.txt");
	            FileWriter fw = new FileWriter(newTextFile);
	            while ((zeile = br.readLine()) != null) {
	                String kopie = zeile.replaceAll("\\},\\{", "##1##").replaceAll("\",\"", "##2##").replaceAll(",","");
	                System.out.println(zeile);
	                kopie =zeile.replaceAll("##1##","},{").replaceAll("##2##","\",\""); 
	                
	               
	  	              System.out.println(kopie);
	             
	                System.out.println(zeile);
	                fw.write(zeile);
	            }
	             fw.close();
	        } catch (IOException e) {
	            e.printStackTrace();
	        }
	    } catch (FileNotFoundException e1) {
	        e1.printStackTrace();
	    }
		}
}

Also gar kein komma wird entfernt gerade
 
Funktioniert das replaceAll bei einem Beispielstring, den du nicht aus der Datei einliest, sondern fest im Programm vorgibst?
Wie viele sysouts sind du in der Konsole, die durch die Zeile System.out.println(zeile); erzeugt werden?
Lass dir mal den Originalinhalt der Zeile vor dem replaceAll ausgeben. Vielleicht geht dir dann ein Licht auf.
 
das komische ist, also alle kommas bleiben drinne aber, aber die ganze struktur der datei geht flöten, ich kann das in csv exportieren, aber obwohl die kommas noch drinne sind, macht der mir daraus also das programm, eine lange zeile, und nicht gewollt die über 1000 zeilen daten
 
Also ich bin raus.
Du hast keine Frage beantwortet, zum wiederholten mal Tipps offenbar nicht befolgt, stattdessen kommt jetzt auf einmal was ganz neues, was nicht so ist wie erwartet.
Ich bin mit meinem Latein am Ende.
 
Tut mir leid, hat sich gar nichts verändernt es ist immer die gleiche ausgabe, egal wo ich mir das ausgeben lasse, und wenn ich mal probiert habe es zu öffnen, wie gesagt, sind die kommas noch da, aber die struktur geht mir flöten !

aber trotzdem danke für die versuche
 
LEUTE LEUTE !!!!! ES LÄUFT !!!!! WARUM MIR DAS GANZE ZERSCHOSSEN WURDE IST EIN GRUNDLEGENDES PROBLEM UND DAFÜR GIBT ES fw.write(System.getProperty("line.separator")); 😀DDDD


ALSO DIE LÖSUNG DANKE EUCH ALLEN !!!!!

Java:
package txtconverter;
 
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
 
 
public class FileWrite{
public static void main(String[] args) throws IOException {
	   try {
 
	        BufferedReader br = new BufferedReader(
	                new FileReader("C:/Users/Sei_Erfolgreich/Desktop/text.txt"));
	        			String zeile;
	        try {
	            File newTextFile = new File("C:/Users/Sei_Erfolgreich/Desktop/convert4.txt");
	            FileWriter fw = new FileWriter(newTextFile);
	            while ((zeile = br.readLine()) != null) {
	            	  String kopie = zeile.replaceAll("\\},\\{", "##1##").replaceAll("\",\"", "##2##").replaceAll(",","");
	                  
	                  kopie = kopie.replaceAll("##1##","},{").replaceAll("##2##","\",\"");
	                fw.write(kopie);
	               fw.write(System.getProperty("line.separator"));
	            }
	             fw.close();
	        } catch (IOException e) {
	            e.printStackTrace();
	        }
	    } catch (FileNotFoundException e1) {
	        e1.printStackTrace();
	    }
		}
}
 

Zurück
Oben