Java从String解析子串的许多实例

时间:2010-02-05 08:06:13

标签: java substring java.util.scanner

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

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

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

谢谢!

3 个答案:

答案 0 :(得分:2)

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

while(index < input.size()){
  substringLocation = input.indexOf("Email:", index);
  // do something with substring
  index = substringLocation;
}

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

答案 2 :(得分:1)

private static final Pattern EMAIL_PATTERN = Pattern.compile
    ("Email:(.*?\\.[a-z]*?[\\.[a-z]]*)"); 

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