2017-01-12 8 views
0

Ich muss Zeichenfolge aus E-Mail-Inhalt erstellt analysieren und Daten extrahieren. Struktur einer E-Mail wie folgt aussieht:Wie analysiert man Zeichenketten und extrahiert Daten im Schlüssel - Wert - Format?

Some email text.............. 
//these properties I have to extract 
Name: SomeName 
Surname: SomeSurname 
Email: SomeEmail 
Adress: some adress 
etc... 
Some email text................ 

Kennen Sie einige Techniken, wie diese Zeichenfolge und Extrahieren von Daten zu analysieren? Ich finde einen Weg, aber es ist defekt, weil es nicht funktioniert, wenn Wert Leerzeichen hat, genau wie Adresse oben.

String searchText = "Name:"; 
    int lastIndexOf = content.lastIndexOf(searchText); 
    String substring = content.substring(1 + lastIndexOf + searchText.length()); 
    String substring1 = substring.substring(0, substring.indexOf(" ")); 
+0

dies sieht aus wie yaml, möglicherweise verwenden Sie einen Java-YAML-Parser ..., oder eine einfache 'content.split (':')', und schneiden Sie die Ergebnisse, wenn sie nicht null sind – epoch

+0

java.util.Properties kann ein sein Weg – Jens

Antwort

0

Hier ist der Code für Ihre Lösung:

FileReader file; 
    String sCurrentLine; 
    String searchString = "Name"; 
    try { 
     file = new FileReader("D:\\junk\\Sample.txt"); 

     BufferedReader br = new BufferedReader(file); 

     br = new BufferedReader(new FileReader("D:\\junk\\Sample.txt")); 

     while ((sCurrentLine = br.readLine()) != null) { 

      String splitString = sCurrentLine.substring(0, sCurrentLine.indexOf(':')); 
      splitString = splitString.replace(" ", ""); 
      if (splitString.equalsIgnoreCase(searchString)) { 
       System.out.println(sCurrentLine.substring(sCurrentLine.indexOf(':')).replace(":","")); 
       break; 
      } 

     } 

    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

Lassen Sie mich den Code erklären: Hier stellen wir eine Eingabe von einer Textdatei nehmen. Die Textdatei enthält die key-value Zuordnungen Sobald wir die Datei lesen, können wir es in eine String in diesem Fall sCurrentLine

Dann teilen wir zuerst den String aus dem ':' und dann entfernen wir alle Leerzeichen und dann speichern Sie die Split analysieren String in splitString Dies wird Schlüssel ohne Leerzeichen aus.

Dann passen wir die splitString mit der searchString. Wenn sie übereinstimmen, drucken wir den Teil des Strings, der hinter dem ':' steht.

Hoffe es hilft!

+0

Ja, lesen Zeile für Zeile wäre Lösung, aber in meinem Fall kann ich Zeile für Zeile nicht lesen becouse ich bekomme diese Zeichenfolge von javax.mail.Message (als Inhalt), so dass diese Zeichenfolge nur eine Zeile haben. –

+0

In diesem Fall müssen Sie die Datei javax.mail.Message in String konvertieren und dann den oben beschriebenen Lösungsansatz befolgen. In diesem Fall wird die while-Schleife nicht benötigt. Es kann nur die Logik innerhalb der while-Schleife verwendet werden, wobei sCurrentLine die Zeichenfolge ist, die Sie nach dem Konvertieren des javax.mail.Message-Feeds erhalten. Bitte beachten Sie die folgenden Links zur Inspiration: http://StackOverflow.com/Questions/11240368/How-to-Read-text-inside-body-of-mail-using-javax-mail und http://Stackoverflow.com/questions/13474705/reading-body-part-of-a-mime-multipart –

+0

Wenn der String wirklich nur eine Zeile ohne Zeilenumbrüche ist, weiß ich nicht, wie du sagst, wo ein Feld endet und das nächste beginnt. Wenn es sich jedoch um eine einzelne Zeichenfolge handelt, die mehrere Zeilen enthält, wie oben angezeigt, können Sie einen [StringReader] (http://docs.oracle.com/javase/8/docs/api/java/io/StringReader.html) (anstelle von FileReader), um die Zeilen in der Zeichenfolge zu lesen. Dies wird nicht der effizienteste Ansatz sein, aber es ist einfach. –

Verwandte Themen