Hallo zusammen,
bei meinem ersten Post erstmal ein großes Lob an tutorials.de. Hat mir schon eine Menge geholfen
Jetzt aber mal zu meinem Problem:
Ich erstelle momentan ein Programm, das unteranderem bestimmte Textpassagen aus PDF's(mittels iText) auslesen soll. Ich lasse mir dabei den gesamten Text des PDF's in einem String wiedergeben und werte diesen mit verschiedenen "Parse-Methoden" aus.
Dabei kann der User die Suchen selbst mittels einer .xml einstellen, da sich die Formatierung der PDF's häufig ändert und statische Suchen festcodiert im Quelltext somit nicht optimal geeignet wären.
Das alles klappt eigentlich auch wunderbar, nur bin ich jetzt bei einem Fallbeispiel auf einen "Fehler" gestoßen, den ich mir beim besten Willen nicht erklären kann:
Und zwar versuche ich aus dem String, mittels zweier Suchwörter den Text dazwischen auszugeben:
Bsp. Such1= Hallo
Such2= gehts?
Text= Hallo wie gehts? ---> Rückgabe sollte demnach "wie" sein.
Die Methode dazu(etwas gekürzt):
textContent= der String aus der PDF
node = die node aus der XML (in der verkürzten Version nicht verwendet)
Wie man sieht lasse ich beim Vergleich die Suchwörter UND den gesamten zu durchsuchenden String mittels toUpperCase() vergleichen, falls der Benutzter z.B. in der XML ein Wort kleingeschrieben einträgt, es tatsächlich aber Groß-Kleinschreibung verwendet etc.
An dieser Stelle scheint auch der Fehler aufzutreten bei folgendem String:
"A-#110;-#108;age zur Kalkulation 1020039 001" (Erstmal ist schon merkwürdig das in der PDF Anlage mit komischen Zeichen geschrieben ist
)
Wenn ich nun an die parse-Methode als Suchwort1: "age zur Kalkulation" und als Suchwort2="001" übergebe, sollte rein logisch?! ja "1020039" ausgegeben werden.
Als Rückgabe erhalte ich aber 20039.
Wenn ich Suchwort1 nun mit "age zur Kalkulati" belege kommt als Ergebnis "1020039" heraus.
Mittels logger habe ich auch schon überprüft ob der String textContent und such1, such2 richtig mit .toUpperCase() umgesetzt werden, was laut Consolen-Ausgabe dann richtig funktioniert.
Wenn ich nun das .toUpperCase weglasse, und die Suchwörter richtig "formatiere"
funktioniert auch alles wunderbar, jedoch kann ich darauf nicht verzichten.
Darum dachte ich mir es könnte vll. an einer falschen Locale bei .toUpperCase() handeln aber selbst wenn ich diese richtig setzte funktioniert es nicht.
Dsa merkwürdig ist: Das passiert bis jetzt NUR bei genau diesen Suchwörtern sonst funktioniert alles "wie es sollte"
Jemand eine Idee woran es liegen kann?
Hoffe ich habe das Problem ein wenig eingegrenzt, falls aber noch fragen bestehen immer gerne
(Die PDF's aus der ich den textContent auslese, kann/darf ich leider nicht zur Verfügung stellen
)
Beste Grüße und schonmal vielen Dank
JayP
bei meinem ersten Post erstmal ein großes Lob an tutorials.de. Hat mir schon eine Menge geholfen

Jetzt aber mal zu meinem Problem:
Ich erstelle momentan ein Programm, das unteranderem bestimmte Textpassagen aus PDF's(mittels iText) auslesen soll. Ich lasse mir dabei den gesamten Text des PDF's in einem String wiedergeben und werte diesen mit verschiedenen "Parse-Methoden" aus.
Dabei kann der User die Suchen selbst mittels einer .xml einstellen, da sich die Formatierung der PDF's häufig ändert und statische Suchen festcodiert im Quelltext somit nicht optimal geeignet wären.
Das alles klappt eigentlich auch wunderbar, nur bin ich jetzt bei einem Fallbeispiel auf einen "Fehler" gestoßen, den ich mir beim besten Willen nicht erklären kann:
Und zwar versuche ich aus dem String, mittels zweier Suchwörter den Text dazwischen auszugeben:
Bsp. Such1= Hallo
Such2= gehts?
Text= Hallo wie gehts? ---> Rückgabe sollte demnach "wie" sein.
Die Methode dazu(etwas gekürzt):
textContent= der String aus der PDF
node = die node aus der XML (in der verkürzten Version nicht verwendet)
Code:
private String parse3(String textContent, Node node) {
String such1;
String such2;
String content;
try{
such1= //Suchwort1 aus XML .toUpperCase();
such2= //Suchwort2 aus XML .toUpperCase();
if (textContent.toUpperCase().contains(such1)){
content= textContent.substring(textContent.toUpperCase().indexOf(such1)+such1.length());
if (content.toUpperCase().contains(such2)){
content= content.substring(0,content.toUpperCase().indexOf(such2));
if (content.endsWith("\\n")) {
content=content.substring(0,content.length()-2);
}
}
else {
content = null;
logger.info("Kein Inhalt gefunden.");
}
}
else {
content = null;
logger.info("Kein Inhalt gefunden.");
}
} catch(Exception e){
content = null;
logger.info("Kein Inhalt gefunden.");
logger.error(e.getMessage());
}
if (inhalt==null){
inhalt=content;
}
else{
inhalt=inhalt+"\n"+content;
}
return inhalt;
}
An dieser Stelle scheint auch der Fehler aufzutreten bei folgendem String:
"A-#110;-#108;age zur Kalkulation 1020039 001" (Erstmal ist schon merkwürdig das in der PDF Anlage mit komischen Zeichen geschrieben ist

Wenn ich nun an die parse-Methode als Suchwort1: "age zur Kalkulation" und als Suchwort2="001" übergebe, sollte rein logisch?! ja "1020039" ausgegeben werden.
Als Rückgabe erhalte ich aber 20039.
Wenn ich Suchwort1 nun mit "age zur Kalkulati" belege kommt als Ergebnis "1020039" heraus.
Mittels logger habe ich auch schon überprüft ob der String textContent und such1, such2 richtig mit .toUpperCase() umgesetzt werden, was laut Consolen-Ausgabe dann richtig funktioniert.
Wenn ich nun das .toUpperCase weglasse, und die Suchwörter richtig "formatiere"
funktioniert auch alles wunderbar, jedoch kann ich darauf nicht verzichten.
Darum dachte ich mir es könnte vll. an einer falschen Locale bei .toUpperCase() handeln aber selbst wenn ich diese richtig setzte funktioniert es nicht.
Dsa merkwürdig ist: Das passiert bis jetzt NUR bei genau diesen Suchwörtern sonst funktioniert alles "wie es sollte"

Jemand eine Idee woran es liegen kann?
Hoffe ich habe das Problem ein wenig eingegrenzt, falls aber noch fragen bestehen immer gerne

(Die PDF's aus der ich den textContent auslese, kann/darf ich leider nicht zur Verfügung stellen

Beste Grüße und schonmal vielen Dank
JayP