Pergunta

Eu estou tentando escrever um pequeno programa java que irá aceitar um arquivo (usando a classe Scanner), devolver o arquivo como um String, e depois procurar essa seqüência para qualquer instância de um substring começando com "Email:" e terminando com ".edu". Haverá muitos exemplos deste substring, cada um dos quais Eu quero analisar fora em uma matriz ou um novo arquivo.

Eu sei como encontrar uma substring, mas eu não sei como A) procurar todas as ocorrências da substring e B) especificar o início e término da substring.

Alguém pode me ajudar com essa lógica?

Obrigado!

Foi útil?

Solução

Isso soa como um caso para expressões regulares para mim:

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));
        }
    }
}

Note que você terá resultados estranhos se você tiver quaisquer não e-mails .edu lá ... por exemplo, se você tem "Email: foo@bar.com Email: a @ b. edu" você pode acabar com um jogo de "foo@bar.com Email:. a@b.edu"

Outras dicas

Você pode usar indexOf (). Eu acho que você pode dizer onde para pesquisa em também. Então, para encontrar suas instâncias do "Email:":

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]]*)"); 

vai resolver o problema e ITT irá trabalhar para qualquer padrão de e-mail, como abc.co.in xyz.com ou domínios test.fileserver.abc.co.bz.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top