String.replace("\r\n"); funktioniert nicht

baschdl

Grünschnabel
Hi,

simples Problem, hoffe ihr findet auch ne einfache Lösung. Ich lese eine Zeile aus einer CSV ein, splitte diese und verteile die Felder an einige Variablen. Soweit so gut. Wenn aber in einem dieser Felder ein Enter gesetzt ist dann splittet er natürlich die nächste Zeile (die ja eigentlich zur vorherigen gehört) und dann kommt ne ArrayIndexOutOfBoundsException. habe mir daraufhin die betreffende Zeile im HexEditor angeschaut und siehe da, am ende der Zeile steht 0A0D was ja das gleiche wie \r\n ist. Ersetzen kann ich diese aber nicht. Ich weiß echt nicht wieso das nicht funktioniert:

Code:
InputStream in = new FileInputStream("Map.csv");
BufferedReader br = new BufferedReader(new InputStreamReader(in, "UTF-8"));
input = br.readLine();
while (input!=null) 
{

if(input.compareTo("")!=0)
{
try
{
	        			
	        		
		                String[] inputArray =input.split("\\|");
		        	
		        	String shortDes = inputArray[3];
		    	//String lineSep=System.getProperty("line.separator");
                                                boolean blabla=shortDes.contains("\r");	
		    	shortDescr = shortDescr.replace("[\r\n]","");
                                                System.out.println(blabla);
habe folgende replacements ausprobiert: \r , \n , \r\n , \012 , \015 , \012\015
keines funktioniert. wenn ich aber whitespaces ("\040") ersetzen will, klappt alles wunderbar. Hat einer von euch vielleicht ne Idee
 
Folgender Code:
Java:
String foo = "foo\r\nbar";
System.out.println(foo);
foo = foo.replaceAll("\r\n", ".");
System.out.println(foo);

gibt bei mir folgendes aus:
Java:
foo
bar
foo.bar


Sollte also funktionieren, eventuell liegts an der Codierung :confused:
 
ja das hab ich bei mir auch schon getestet und es funktioniert wunderbar, daher verstehe ich ja nicht wieso es bei der eingelesenen Zeile nicht funktioniert
 
Hm, ich sehe gerade du liest ja schon Zeilenweise aus.
Kann es sein das du dann nur noch "\r" ersetzen musst?

[edit]
probier doch mal
Java:
for(byte b: shortDescr.getBytes()) System.out.println(b);
 
Zuletzt bearbeitet:
Wie kann das sein. Auf der Console wird ausegegeben, dass ein Punkt das letzte Zeichen im String shortdes ist aber wenn ich aus der csv genau den gleichen String kopiere und im HexEditor lege (oder auch word und formatierungszeichen an), dann sehe ich da ein 0A0D als letzte chars. müssen ja schließlich auch da sein sonst würde mein Array ja nicht Felder ansprechen die durch die Verschiebung nicht mehr da sind.

sssssssssss|ccccccccccccccccccccc|nnnnnnnnnnnnn\r\n|aaaaaaaaaaaaaaa

heißt ja dann:
zeile: inhalt

1: sssssssssss|ccccccccccccccccccc|nnnnnnnnnnnnn
2: |aaaaaaaaaaaaaaa

also kann ich in der zeile zwei das Feld[2] nicht mehr ansprechen
 
Ich wette es liegt daran das du mit readLine() zeilenweise einliest, da wird ja dann logischerweise der Umbruch weggelassen.
Ich würde an deiner Stelle die Datei erstmal als ganzes einlesen, dann alle Backslashes >> entwerten ("\\r\\n") << und dann den Text zeilenweise durch itterieren.
 
mmh, am jeden Zeilenende ist doch auch \r\n.

Code:
FileReader fileIn = new FileReader("Map.csv");
int za=0;
        	int zi=0;
        	boolean test=false;
	        for(;;)
	        {
	        	int fileInteger = fileIn.read();
	        	if(fileInteger == -1){break;}
	        	char fileChar = (char) fileInteger;
	        	
	        	if(fileChar=='\n'||fileChar=='\r')
	        	{
	        		za++;
	        		test=true;
	        		if(fileChar=='\n'&&test==true)
	        		{
	        			zi++;
	        			System.out.println("n und r"+zi);
	        		}
	        		
	        	}else{
	        		test=false;
	        	}

wie kann ich jetzt alle \r\n ersetzen (mit dem Filereader hab ich noch nie gearbeitet)?
 
Du kannst auch mit dem BufferedReader arbeiten, so hast wenigstens die Kodierung.
So in etwa (kein Plan ob das nich evtl. overpowered is :D):

Java:
public void test() {
	try {
		InputStream in = new FileInputStream("Map.csv");
		BufferedReader br = new BufferedReader(new InputStreamReader(in, "UTF-8"));
		StringBuilder buff = new StringBuilder(in.available());
		int ch = 0;
		while((ch=br.read())>=0) buff.append((char)ch);

		String[] lines = buff.toString().split("\n");
		for(String line: lines) System.out.println(line);
	}
	catch(IOException e) { e.printStackTrace(); }
}
 
Zuletzt bearbeitet:
Zurück