Java, анализирующий множество экземпляров substring из String
-
18-09-2019 - |
Вопрос
Я пытаюсь написать небольшую java-программу, которая примет файл (используя класс Scanner), вернет файл в виде строки, а затем выполнит поиск в этой строке любого экземпляра подстроки, начинающейся с "Email:" и заканчивающейся ".edu".Будет много экземпляров этой подстроки, каждый из которых я хочу разобрать в массив или новый файл.
Я знаю, как найти подстроку, но я не знаю, как А) выполнить поиск по всем экземплярам подстроки и Б) указать начало И конец подстроки.
Кто-нибудь может помочь мне с этой логикой?
Спасибо!
Решение
Для меня это звучит как пример регулярных выражений:
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 ".
Другие советы
Вы могли бы использовать indexOf().Я думаю, вы тоже можете указать ему, откуда искать.Итак, чтобы найти ваши экземпляры "Электронной почты"::
while(index < input.size()){
substringLocation = input.indexOf("Email:", index);
// do something with substring
index = substringLocation;
}
private static final Pattern EMAIL_PATTERN = Pattern.compile
("Email:(.*?\\.[a-z]*?[\\.[a-z]]*)");
Решит проблему, и itt будет работать для любого шаблона электронной почты, такого как abc.co.in xyz.com или тестовый.fileserver.abc.co.bz домены.