2014-12-13 5 views
1

Я пытаюсь написать программу, которая будет тянуть темы электронной почты из учетной записи google. Затем я хотел бы искать эти темы, и если они содержат определенные строки, подключите эту строку к уравнению. Мой офис использует электронную почту для отслеживания своих технических специалистов, и мы несем ответственность за поддержание пробега. Я хотел бы сделать программу Java, которая будет принимать эти темы электронной почты и рассчитать пробег, основанный на них.Как извлечь переменные из строки текста?

Например, тема моего письма: «Выход из LMN» Я хочу найти эту тему для String LMN, которую я могу установить как расстояние до места расположения LMN.

у меня есть:

import java.util.Properties; 

import javax.mail.Folder; 
import javax.mail.Message; 
import javax.mail.MessagingException; 
import javax.mail.Session; 
import javax.mail.Store; 

public class EmailReader { 


public static void main(String args[]) { 
    Properties props = System.getProperties(); 
    props.setProperty("mail.store.protocol", "imaps"); 
    try { 
     Session session = Session.getDefaultInstance(props, null); 
     Store store = session.getStore("imaps"); 
     store.connect("imap.gmail.com", "emailaddress", "password"); 
     System.out.println(store); 

     Folder inbox = store.getFolder("Inbox"); 
     inbox.open(Folder.READ_ONLY); 
     Message messages[] = inbox.getMessages(); 
     for (Message message : messages) { 
      System.out.print("SUBJECT: "); 
      System.out.println(message.getSubject()); 
      System.out.print("DATE: "); 
      System.out.println(message.getSentDate()); 
     } 
    } catch (MessagingException e) { 
     e.printStackTrace(); 
     System.exit(2); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     System.exit(2); 
    } 

} 

Что делает правильно тянуть предметы, но у меня возникли проблемы с манипулированием данными здесь. Я играл с str.indexOf(), но не смог заставить его работать.

+0

Как вы планируете использовать его, как только вы его получите? IOW, если вы смогли извлечь «LMN», как вы планируете сопоставить это расстояние и где находится расстояние - файл, db, жесткий код? – ChiefTwoPencils

+0

На данный момент жестко закодирован. В конце концов, я хотел бы подключить его к API карт google. IE; Установите LMN = 123 Address Rd City, ST, а затем возьмите эту переменную и импортируйте ее в API карт google, если это возможно ...Я только начинаю и могу откусывать больше, чем могу жевать. –

+0

Приведите примеры ввода текста и желаемого извлеченного текста – Bohemian

ответ

1

Что вам нужно RegEx. Регулярное выражение используется для поиска внутри строки путем создания шаблона. Этот шаблон применяется к строке. Вы можете использовать RegEx для разных ситуаций.

В вашем примере, вы должны извлечь часть вашей строки: ЛМН

[A-Z]{3} 

, которые представляют собой строку из 3 символов алфавитной и прописных букв.

Вы можете указать свой шаблон, чтобы начать с чем-то:

^.*[ ] 

Где^начало строки,. представляют любые символы и число от нуля до бесконечности. [] - это пробел перед LMN.

объединен эти 2 RegEx дать вам:

^.*[ ][A-Z]{3}$ 

в $ представляет конец строки. Так что ничего до пробела и 3 символа в верхнем регистре в конце.

Оттуда вы хотите извлечь только 3 символа. Вы можете сгруппировать их:

^.*[ ]([A-Z]{3})$ 

Ссылаясь на этот website, то Java выглядеть следующим образом:

Pattern pattern = Pattern.compile("^.*[ ]([A-Z]{3})$"); 
Matcher m = pattern.matcher(message.getSubject()); 
if (m.matches()) { 
    String location = m.group(1); 
} 
+0

Я верю, что это именно то, что я ищу. Я тестировал это, и это дает ошибку, когда я помещаю в строку, которая говорит: Matcher m = pattern.matcher (pattern); В нем говорится: «Матчи метода (CharSequence) в шаблоне типа не применимы для аргументов (шаблон) –

+0

Да, извините за то, что строка' Matcher m = pattern.matcher (message.getSubject()); '. мой ответ – bodyjares

+0

Да, это прекрасно работает. Спасибо! –

0

Если вам нужна мощность и гибкость, то регулярные выражения - это путь. У Oracle есть отличный учебник на своем сайте.

http://docs.oracle.com/javase/tutorial/essential/regex/index.html

Вот некоторые примеры кода, как вы бы искать 'LMN' в тему:

String match = "LMN"; 
String subject = "bla bla bla LMN bla bla"; 
Matcher matcher = Pattern.compile(match, Pattern.CASE_INSENSITIVE).matcher(subject); 
boolean found = matcher.find(); 
if (found) { 
    System.out.println(matcher.start()); // Tells you where the match begins 
    System.out.println(matcher.end()); // Tells you where the match ends 
} 
+0

Я дам ему шанс и дам вам знать, как он работает. Благодаря! –

+0

Был в состоянии заставить его делать то, что я хотел, используя это (для этой части так или иначе) Большое спасибо! –

+0

Добро пожаловать @ThomasBartley –

Смежные вопросы