1

我正在尝试编写一个小型 Java 程序,它将接受一个文件(使用 Scanner 类),将文件作为字符串返回,然后在该字符串中搜索以“Email:”开头并以“.edu”结尾的子字符串的任何实例”。这个子字符串会有很多实例,每个实例我都想解析成一个数组或一个新文件。

我知道如何查找子字符串,但我不知道如何 A) 搜索子字符串的所有实例和 B) 指定子字符串的开始和结束。

有人可以帮我解决这个逻辑吗?

谢谢!

4

3 回答 3

2

您可以使用 indexOf()。我想你也可以告诉它从哪里搜索。因此,要找到您的“电子邮件:”实例:

while(index < input.size()){
  substringLocation = input.indexOf("Email:", index);
  // do something with substring
  index = substringLocation;
}
于 2010-02-05T08:09:55.347 回答
1

对我来说,这听起来像是正则表达式的一个案例:

import java.util.regex.*;

public class Test
{
    private static final Pattern EMAIL_PATTERN = Pattern.compile
        ("Email:(.*?\\.edu)");

    public static void main(String[] args)
    {
        String testString = "FooEmail:jjj@xyz.edu Bar Email:mmm@abc.edu Baz";

        printEmails(testString);
    }

    public static void printEmails(String input)
    {
        Matcher matcher = EMAIL_PATTERN.matcher(input);
        while (matcher.find())
        {
            System.out.println(matcher.group(1));
        }
    }
}

请注意,如果你有任何 .edu电子邮件,你会得到奇怪的结果......例如,如果你有“电子邮件:foo@bar.com 电子邮件:a@b.edu”,你最终会得到一个匹配“foo@bar.com 电子邮件:a@b.edu”。

于 2010-02-05T08:23:48.140 回答
1
private static final Pattern EMAIL_PATTERN = Pattern.compile
    ("Email:(.*?\\.[a-z]*?[\\.[a-z]]*)"); 

将解决问题,它适用于任何电子邮件模式,例如 abc.co.in xyz.com 或 test.fileserver.abc.co.bz 域。

于 2011-08-31T08:45:27.067 回答