Ich bin gestern auf ein Problem gestoßen, wo ich in Moment selber nicht genau weiß, womit das zusammen hängen mag und möchte gerne einmal die Java-Forum-Gemeinde fragen, ob jemanden von Euch etwas bekannt wäre.
Vorhaben
Ich lese mit der Apache.poi-Bibliothek ein Word-Dokumte ein und versuche mit Hilfe von regulären Ausdrücken herauszufinden, ob eine Anschrift, Email-Adresse, Telefonnummer etc. enthalten sind. Dazu ein kleiner Quell-Code von mir (Aus dem Beitrag von Gestern: https://www.tutorials.de/threads/fr...n-regulaeren-ausdruecken.402407/#post-2076273):
Ich lese im oberen Abschnitt (Zeilen 14-17) eine Word-Datei ein und versuche mit den entsprechenden regulären Ausdrücken (Zeile 26 - 29) nach Email-Adressen ausschau zu halten.
Zu Testzwecken habe ich eine Doc-Datei "test.doc" mit folgendem Inhalt erstellt:
Adresse Hochmeisterstr.3a
Anschrift: kei_der-dam-m- 23
Hallo World tabulator
Telefon 24567987
Das ist eine Word-Datei
Das ist eine weitere Zeile
E-Mail gehsj@jsd.com
lkjl
Problemfall
Wenn ich jetzt in der Schleife über den Index des String-Arrays "tokens" iteriere, werden mir alle Wörter, so wie sie in der Doc-Datei stehen, ausgegeben.
Auch wenn ich nur nach dem Key-Wort "E-mail" mit den regulären Ausdruck: Pattern.matches("[Ee-]{1,2}?[Mm]ail", tokens) suche, wird mir der Token auf der Konsole angezeigt, der das Word E-mail beinhaltet.
Mein Problem ist nun aber, dass die nachfolgende Email-Adresse "gehsj@jsd.com" (tokens[i+1]) nicht ausgegeben wird.
Analyse
Ich habe bereits Stunden gegoogelt und bisher auf nichts brauchbares gestoßen. Also habe ich selber versucht zu ergründen worin der Fehler bestehen könnte.
Zuerst habe ich gestern einen hilfreichen Tipp bekommen, das man auf der Seite: http://www.rubular.com/r/D8xmoDbgq6 seine reg. Ausdrücke überprüfen kann, um Fehler im Ausdruck ausschließen zu können. Mein regulärer Ausdruck habe ich also im Vorfeld getestet und ist korrekt!
Da ich also so nicht auf den Fehler ommen konnte, ist mir in den Sinn gekommen, ob die Ursache des Fehlers in Zusammenhang mit dem Format doc zu tun hätte.
Dazu habe ich schnell eine neue Klasse geschrieben die statt einer Doc-, eine Txt-Datei einließt.
Ich habe den identischen Inhalt der test.doc in die neue txt-Datei kopiert und mit dem selben Ausdruck geschaut, ob mir nun die Email-Adresse ausgegeben wird, und siehe da, es hat also geklappt.
Siehe Code-Beispiel:
Komisch ist auch das Phänomen, dass wenn in der Doc-Datei ein Hyperlink für Emails gesetzt wird, auch nichts mehr im Token-Platzhalter für die Email-Adresse steht (leer).
Wenn jemand ähnliche Erfahrungen gesammelt hat und vielleicht eine Lösung für mein Problem hätte, dem wäre ich sehr dankbar.
Vorhaben
Ich lese mit der Apache.poi-Bibliothek ein Word-Dokumte ein und versuche mit Hilfe von regulären Ausdrücken herauszufinden, ob eine Anschrift, Email-Adresse, Telefonnummer etc. enthalten sind. Dazu ein kleiner Quell-Code von mir (Aus dem Beitrag von Gestern: https://www.tutorials.de/threads/fr...n-regulaeren-ausdruecken.402407/#post-2076273):
Java:
...
public class Model{
WordExtractor we = null;
FileInputStream fis = null;
HWPFDocument doc = null;
String texContent;
public Model(){}
public void readFile(){
try{
fis = new FileInputStream("C:\\test.doc");
doc = new HWPFDocument(fis);
we = new WordExtractor(doc);
fis.close();
}
catch(Exception e){
e.printStackTrace();
}
for(String para: we.getParagraphText()){
String[] tokens = para.split("[\\t:;, ]+");
for(int i=0; i < tokens.length; i++){
if(Pattern.matches("[Ee-]{1,2}?[Mm]ail", tokens[i]) &&
Pattern.matches("[a-zA-Z0-9-_]+@[a-zA-Z0-9-_]+\\.[a-z]{2,3}", tokens[i+1])){
System.out.print(tokens[i+1]);
}
}
}
}
}
Ich lese im oberen Abschnitt (Zeilen 14-17) eine Word-Datei ein und versuche mit den entsprechenden regulären Ausdrücken (Zeile 26 - 29) nach Email-Adressen ausschau zu halten.
Zu Testzwecken habe ich eine Doc-Datei "test.doc" mit folgendem Inhalt erstellt:
Adresse Hochmeisterstr.3a
Anschrift: kei_der-dam-m- 23
Hallo World tabulator
Telefon 24567987
Das ist eine Word-Datei
Das ist eine weitere Zeile
E-Mail gehsj@jsd.com
lkjl
Problemfall
Wenn ich jetzt in der Schleife über den Index des String-Arrays "tokens" iteriere, werden mir alle Wörter, so wie sie in der Doc-Datei stehen, ausgegeben.
Auch wenn ich nur nach dem Key-Wort "E-mail" mit den regulären Ausdruck: Pattern.matches("[Ee-]{1,2}?[Mm]ail", tokens) suche, wird mir der Token auf der Konsole angezeigt, der das Word E-mail beinhaltet.
Mein Problem ist nun aber, dass die nachfolgende Email-Adresse "gehsj@jsd.com" (tokens[i+1]) nicht ausgegeben wird.
Analyse
Ich habe bereits Stunden gegoogelt und bisher auf nichts brauchbares gestoßen. Also habe ich selber versucht zu ergründen worin der Fehler bestehen könnte.
Zuerst habe ich gestern einen hilfreichen Tipp bekommen, das man auf der Seite: http://www.rubular.com/r/D8xmoDbgq6 seine reg. Ausdrücke überprüfen kann, um Fehler im Ausdruck ausschließen zu können. Mein regulärer Ausdruck habe ich also im Vorfeld getestet und ist korrekt!
Da ich also so nicht auf den Fehler ommen konnte, ist mir in den Sinn gekommen, ob die Ursache des Fehlers in Zusammenhang mit dem Format doc zu tun hätte.
Dazu habe ich schnell eine neue Klasse geschrieben die statt einer Doc-, eine Txt-Datei einließt.
Ich habe den identischen Inhalt der test.doc in die neue txt-Datei kopiert und mit dem selben Ausdruck geschaut, ob mir nun die Email-Adresse ausgegeben wird, und siehe da, es hat also geklappt.
Siehe Code-Beispiel:
Java:
public void readFile(){
try{
fr = new FileReader(new File("C:/test.txt"));
br = new BufferedReader(fr);
String zeile;
while((zeile = br.readLine()) != null){
String[] tokens = zeile.split("[\\t:;, ]+");
for(int i=0; i < tokens.length; i++){
if(Pattern.matches("[Ee-]{1,2}?[Mm]ail", tokens[i]) &&
Pattern.matches("[a-zA-Z0-9-_]+@[a-zA-Z0-9-_]+\\.[a-z]{2,3}", tokens[i+1])){
System.out.print(tokens[i+1]);
}
}
}
br.close();
}
catch(FileNotFoundException e){
e.printStackTrace();
}
Komisch ist auch das Phänomen, dass wenn in der Doc-Datei ein Hyperlink für Emails gesetzt wird, auch nichts mehr im Token-Platzhalter für die Email-Adresse steht (leer).
Wenn jemand ähnliche Erfahrungen gesammelt hat und vielleicht eine Lösung für mein Problem hätte, dem wäre ich sehr dankbar.
Zuletzt bearbeitet: