Regex löscht ersten Buchstaben

HentaiD

Mitglied
Hallo Freunde,
ich habe ein Problem mit Regex. Ich lese eine Zeile aus einer Datei und splitte danach vorerst in 2 Teile. Die Datei hat diese Beschaffenheit:

..
application/xhtml+xml xhtml xht
application/xml xml xsl xsd
application/xml-dtd
..

Dabei wird der linke Teil und der rechte teil seperiert. Einziges Problem:

Bei Ausgabe von mat.group(1) (Sprich: Der erste Teil, wobei 0 das gesamte ist und auch schon Probleme macht) passiert es oft (nicht immer), dass der erste Buchstabe fehlt.
Die Ausgabe sieht dann so aus:

..
model/iges
odel/mesh
odel/vrml
text/calendar
ext/css
..

Erklärlich ist mir das nicht. Hier mal mein Problemcodeschnipsel:

Code:
// Save types and extensions in array
		while (reader.read() != -1) {
			String line = reader.readLine();
			System.out.println(reader.readLine());
			if (line != null) {
				Pattern pat = Pattern.compile("^([^/]+/[^\t]+)[\t]+([^$]+)");
				Matcher mat = pat.matcher(line);

				if (mat.find()) {
					System.out.println(mat.group(1));

Das erste System.out gibt noch korrekte Werte aus. Das zweite dann nicht mehr.
Hat da vll. jemand eine Problemlösung, da durch rumprobieren irgendwie entweder nicht mehr funktioniert hat, oder sich nicht geändert hat.


Liebe Grüße, D
 
Hi,

wenn du die Mimetypen als einen Teil, und die Endungen als den anderen Teil betrachtest, dann sollte folgendes reichen:
Java:
String teile = line.split(" ", 2);

Ergibt zum Beispiel folgendes:
Code:
[0] = "application/xhtml+xml"
[1] = "xhtml xht"

[0] = "application/xml"
[1] = "xml xsl xsd"

[0] = "application/xml-dtd"

Gruß
BK
 
Zuletzt bearbeitet:
Hi,
danke das würde auch funktionieren, allerdings fehlt da auch der erste Buchstabe. Mittlerweile weiß ich auch warum:

String line = reader.readLine();

reader.readLine() ist ok, per System.out gibt es die richtigen Werte aus, überprüfe ich hingegen "line", fehlt der erste Buchstabe. Warum speichert er denn nicht richtig? Ist da irgendwas bekannt?
Offenbar liegt das Problem also nicht beim Regex, sondern... tja wo auch immer.


Liebe Grüße, D
 
Dein Code zum auslesen ist einfach nicht korrekt:
In deiner while-Schleife wird immer schon ein Byte gelesen (z.B. der erste Buchstabe) bevor du ein readLine machst.

Richtig ist:
Java:
String line = null;
while((line = reader.readLine()) != null){
   System.out.println(line);
}
 
Zurück