如何从一串文本中提取变量?

时间:2014-12-13 21:40:37

标签: java

我正在尝试编写一个程序,用于从Google帐户中提取电子邮件的主题。然后,我想搜索这些主题,如果它们包含某些字符串,则将该字符串插入等式中。我的办公室使用电子邮件跟踪其技术人员,我们有责任跟上里程。我想制作一个Java程序,它将接收这些电子邮件主题并根据它们计算里程数。

例如,我的电子邮件的主题是:"离开LMN" 我想搜索字符串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(),但无法让它发挥作用。

2 个答案:

答案 0 :(得分:1)

您需要的是RegEx。正则表达式用于通过创建模式在字符串中进行搜索。该模式适用于字符串。您可以在不同情况下使用RegEx。

在您的示例中,您需要提取字符串的一部分:LMN

[A-Z]{3}

表示字母和大写的3个字符的字符串。

您可以指定您的模式以开始:

^.*[ ]

其中^是字符串的开头,。表示任何字符和* 0到无穷大的时间。 []是LMN之前的空间。

结合这两个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);
}

答案 1 :(得分: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
}