我正在尝试编写一个小型 Java 程序,它将接受一个文件(使用 Scanner 类),将文件作为字符串返回,然后在该字符串中搜索以“Email:”开头并以“.edu”结尾的子字符串的任何实例”。这个子字符串会有很多实例,每个实例我都想解析成一个数组或一个新文件。
我知道如何查找子字符串,但我不知道如何 A) 搜索子字符串的所有实例和 B) 指定子字符串的开始和结束。
有人可以帮我解决这个逻辑吗?
谢谢!
我正在尝试编写一个小型 Java 程序,它将接受一个文件(使用 Scanner 类),将文件作为字符串返回,然后在该字符串中搜索以“Email:”开头并以“.edu”结尾的子字符串的任何实例”。这个子字符串会有很多实例,每个实例我都想解析成一个数组或一个新文件。
我知道如何查找子字符串,但我不知道如何 A) 搜索子字符串的所有实例和 B) 指定子字符串的开始和结束。
有人可以帮我解决这个逻辑吗?
谢谢!
您可以使用 indexOf()。我想你也可以告诉它从哪里搜索。因此,要找到您的“电子邮件:”实例:
while(index < input.size()){
substringLocation = input.indexOf("Email:", index);
// do something with substring
index = substringLocation;
}
对我来说,这听起来像是正则表达式的一个案例:
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”。
private static final Pattern EMAIL_PATTERN = Pattern.compile
("Email:(.*?\\.[a-z]*?[\\.[a-z]]*)");
将解决问题,它适用于任何电子邮件模式,例如 abc.co.in xyz.com 或 test.fileserver.abc.co.bz 域。