String lässt sich nicht Zusammenfügen

Diskutiere String lässt sich nicht Zusammenfügen im Allgemeine Java-Themen Bereich.
M

MichaProgs

Hallo,

ich arbeite aktuell mit PDFBox und lese aus einer PDF-Datei den Inhalt als String aus. Aus teilen des Inhalts möchte ich den Dateinamen für die Datei festlegen. Die "Bausteine" dafür habe ich, allerdings lässt sich der String nicht zusammenführen.

Code:
File f = new File("...");
PDDocument doc = PDDocument.load(f);
PDFTextStripper pdfStripper = new PDFTextStripper();
String s = pdfStripper.getText(doc);

String[] lines = s.split("\\n");
for(int i = 0; i < lines.length; i++){
    System.out.println(i +" " +lines[i]);
}

String name = lines[8];
System.out.println(name);
String location = lines[10];
System.out.println(location);
String art = lines[15];
System.out.println(art);
Er gibt mir sowohl die Lines in der For-Schleife, als auch die angegebenen Arrays korrekt aus. Sobald ich aber einen String mit '+', StringBuilder, StringBuffer und wie sie alle heißen zusammenfüge, wird nur der zuletzt hinzugefügte String ausgegeben. Alles andere wird verschluckt.

VG
Micha
 
krgewb

krgewb

Bei StringBuilder verwendet man kein + sondern append().
Am Ende wandelt man den StringBuilder mithilfe von toString() in einen String um.
 
M

MichaProgs

Dem bin ich mir bewusst und so habe ich es natürlich auch angewendet. Wollte damit nur sagen, dass ich bereits mehrere Methoden zur Verkettung angewendet und immer das selbe Ergebnis erhalten habe.
 
J

JustNobody

Wie wäre es denn, wenn Du den Code, der Deiner Meinung nach funktionieren müsste und nicht funktioniert, postest?
 
M

MichaProgs

Hier nochmal mit Kommentaren:

Java:
File f = new File("...");
PDDocument doc = PDDocument.load(f);

PDFTextStripper stripper = new PDFTextStripper();
String s = stripper.getText(doc);

String[] lines = s.split("\\n");
for(int i = 0; i < lines.length; i++){
    System.out.println(i + " " + lines[i]);
}

String name = lines[17];
System.out.println(name); //Bsp: Max Mustermann
String location = lines[20];
System.out.println(location); //Bsp: Musterstadt
String art = lines[26];
System.out.println(art); //Bsp: Angebot

String filename = art + " " + name + ", " + location; // müsste 'Angebot Max Mustermann, Musterstadt' ergeben
System.out.println(filename); // ergibt ', Musterstadt'

String filename2 = art + " " + name + ", " + "Musterstadt";
System.out.println(filename2); // ergibt ', Musterstadt'

String filename3 = "Angebot" + " " + "Max Mustermann" + ", " + location;
System.out.println(filename3); // funktioniert

String filename4 = "Angebot" + " " + name + ", " + "Musterstadt";
System.out.println(filename4); // ergibt ', Musterstadt'

String filename5 = "Angebot" + " " + "Max Mustermann" + ", " + "Musterstadt";
System.out.println(filename5); // funktioniert
 
J

JustNobody

Also was ich hier vermute: Du hast Zeilenenden mit \r\n und nicht nur \n. Dadurch hast Du noch ein \r (Carrier Return) übrig, so dass er wieder an den Anfang springt bei der Ausgabe. Er gibt also tatsächlich alles aus nur eben springt er mitten drin an den Anfang der Zeile und überschreibt.

Als Test kannst Du Dir ja mal ansehen:
Java:
    public static void main(String[]args){
        String test = "Test1\r" + "abc";
        System.out.println(test);
        System.out.println(test.substring(0,3));
    }
Die Ausgabe davon bei mir:
Code:
abct1
Tes
Das abc überschreibt also das Tes - das Tes ist aber noch im String selbst drin - der String ist halt "Test1\rabc".

Somit wäre ein regulärer Ausdruck zum Trennen der Zeilen evtl. besser ein "\\r+\\n" - das kann dann sowohl mit den Windows Zeilenenden (\r\n) als auch den Unix Zeilenenden (\n) umgehen.
 
krgewb

krgewb

So ein String macht keine Probleme:

Java:
public class Hauptprogramm {

	public static void main(String[] args) {

		String s = "0 fddf\n" +
		"a fdfdfd\n" +
		"b fdfdfd\n" +
		"c fdfdfd\n" +
		"d fdfdfd\n" +
		"e fdfdfd\n" +
		"f fdfdfd\n" +
		"g fdfdfd\n" +
		"h fdfdfd\n" +
		"i fdfdfd\n" +
		"j fdfdfd\n" +
		"k fdfdfd\n" +
		"l fdfdfd\n" +
		"m fdfdfd\n" +
		"n fdfdfd\n" +
		"o fdfdfd\n" +
		"p fdfdfd\n" +
		"Max Mustermann\n" +
		"r fdfdfd\n" +
		"s fdfdfd\n" +
		"Musterstadt\n" +
		"u fdfdfd\n" +
		"v fdfdfd\n" +
		"w fdfdfd\n" +
		"x fdfdfd\n" +
		"y fdfdfd\n" +
		"Angebot\n";		

		String[] lines = s.split("\\n");
		for (int i = 0; i < lines.length; i++) {
			System.out.println(i + " " + lines[i]);
		}

		String name = lines[17];
		System.out.println(name); // Bsp: Max Mustermann
		String location = lines[20];
		System.out.println(location); // Bsp: Musterstadt
		String art = lines[26];
		System.out.println(art); // Bsp: Angebot

		String filename = art + " " + name + ", " + location; // müsste 'Angebot Max Mustermann, Musterstadt' ergeben
		System.out.println(filename); // ergibt ', Musterstadt'
		
		String filename2 = art + " " + name + ", " + "Musterstadt";
		System.out.println(filename2); // ergibt ', Musterstadt'

		String filename3 = "Angebot" + " " + "Max Mustermann" + ", " + location;
		System.out.println(filename3); // funktioniert

		String filename4 = "Angebot" + " " + name + ", " + "Musterstadt";
		System.out.println(filename4); // ergibt ', Musterstadt'

		String filename5 = "Angebot" + " " + "Max Mustermann" + ", " + "Musterstadt";
		System.out.println(filename5); // funktioniert
		
	}
}
Ausgabe:
Java:
0 0 fddf
1 a fdfdfd
2 b fdfdfd
3 c fdfdfd
4 d fdfdfd
5 e fdfdfd
6 f fdfdfd
7 g fdfdfd
8 h fdfdfd
9 i fdfdfd
10 j fdfdfd
11 k fdfdfd
12 l fdfdfd
13 m fdfdfd
14 n fdfdfd
15 o fdfdfd
16 p fdfdfd
17 Max Mustermann
18 r fdfdfd
19 s fdfdfd
20 Musterstadt
21 u fdfdfd
22 v fdfdfd
23 w fdfdfd
24 x fdfdfd
25 y fdfdfd
26 Angebot
Max Mustermann
Musterstadt
Angebot
Angebot Max Mustermann, Musterstadt
Angebot Max Mustermann, Musterstadt
Angebot Max Mustermann, Musterstadt
Angebot Max Mustermann, Musterstadt
Angebot Max Mustermann, Musterstadt
 
J

JustNobody

Da baust Du den String ja auch mit \n auf - Bau den String doch einmal mit \r\n am Ende jeder Zeile auf, dann bekommst Du das Problem ebenfalls.
 
M

MichaProgs

Was so ein kleines \\r ausmachen kann :rolleyes::D
Vielen Dank für die Hilfe. Mit \\r\\n gibt er die Zeilen tatsächlich korrekt aus.
 
Thema: 

String lässt sich nicht Zusammenfügen

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben