BufferedReader und .split()

dangario

Mitglied
Hallo allerseits!

Ich habe ein Bild im .ppm Format, welches ich in einem Java-Programm einlesen möchte um daraus die Höhe, Breite und den maximalen Farbwert des Bildes zu erhalten.
Dazu hab ich mir folgende Methode geschrieben:

Java:
import java.io.*;
import java.util.Arrays;
public class PPMReader {
	
	
	public static PPMImage read (File bild) throws IOException{
		
		String s;
		int width = 0;
		int height = 0;
		int maxVal = 0;
		String[] bildArray = null;
		
		BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(bild)));
		
		while(null != (s = br.readLine())){
			//Kommentare aus dem Bild entfernen
                        if (s.contains("#")) continue;
			else {bildArray = s.split("\\s+");}
			//Tests
			System.out.println(bildArray[0]);
			System.out.println(bildArray[1]);
			
			width = Integer.parseInt(bildArray[1]);
			height = Integer.parseInt(bildArray[2]);
			maxVal = Integer.parseInt(bildArray[3]);
		
		}
		PPMImage eingeleseneDatei = new PPMImage (width,height,maxVal);
		return eingeleseneDatei;	
	}	
}

Das einlesen und splitten scheint soweit zu funktionieren. Wenn ich mir mit Arrays.toString() das bildArray ausgeben lasse scheint es mir in Ordnung zu sein. Das System.out.println(bildArray[0] funktioniert auch noch, aber bei
System.out.println(bildArray[1]) bekomme ich eine ArrayIndexOutOfBounds Exception. jetzt kommt es mir so vor als hätte das bildArray nur ein großes Element in dem der ganz Text gespeichert ist? Wie kann es aber dann sein dass ich mit System.out.println(bildArray[0]); wie erwartet ein "P3" ausgegeben bekomme? mache ich beim splitten irgendwas falsch?
Danke im voraus, dangario
 
In der ersten Zeile steht nur P3, da gibt es kein Leerzeichen oder sonstige Whitespace und daher besitzt das von split() gelieferte Array keinen Index 1.

Grundsätzlich ist es immer gefährlich auf einen beliebigen Index eines Arrays zu zugreifen, ohne vor der dessen Existenz bzw. die Länge des Arrays geprüft zu haben.
 
ok, danke schon mal soweit 🙂
ich habe jetzt mal die Länge des Arrays überprüft und das funktioniert auch (die Länge ist halt seeehr lang, da es sich bei der Datei um ein richtiges Foto handelt). Jetzt möchte ich bei meinem Array den nächsten Index herausfinden, den es wieder gibt (das müsste ja dann die Breite sein). Wie kann ich nun überprüfen ob es in einen Index gibt oder nicht? Ich dachte immer wenn ein Index in einem Array nicht belegt ist, wird dort einfach "null" gespeicher, das ist aber wohl nicht so, oder habe ich was falsch verstanden?
gruß dangario
 
"bildArray.length" solltest du die komplette anzahl der Felder auslesen können.

anders kannst du aber auch abfragen ob ein Feld null ist:
Code:
if (array[0] == null) {
}
 

Zurück
Oben