我正在尝试编写一个程序,用于从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()
,但无法让它发挥作用。
答案 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
}