Java, анализирующий множество экземпляров substring из String

StackOverflow https://stackoverflow.com/questions/2205766

Вопрос

Я пытаюсь написать небольшую 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 домены.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top