Ajuda sobre como Localizar String de E-mails dentro de um jtextArea

Bom dia pessoal, gostaria da ajuda de vocês para o seguinte, Meu chefe me pediu para criar uma aplicação que ao ser executada ela deve ler o conteúdo de um arquivo de texto, jogar o texto para um JTextArea, identificar os e-mails contidos no texto, se o e-mail for de um domínio diferente do da empresa ela deve preencher com “Email_nao_permitido” e escrever um novo arquivo .txt, e para os e-mails que forem do domínio da empresa, deve ser exportados em uma lista separada gerando um novo txt chamado lista_emails.txt.

Só que eu não faço ideia de como fazer isso,

Eu consegui ler o arquivo e preencher no jtextArea, mas não faço idéia de como ler o conteúdo e descobrir quais palavras são e-mails e quais não são, para depois eu filtrar quais são do dominio da empresa Ex.:"@empresa.com".

Alguém tem como me orientar.

jTextArea2.append(tf_pesquisar.getText());
        
        arquivo2 = null;
        JFileChooser file = new JFileChooser();  
        FileNameExtensionFilter filtroTXT = new FileNameExtensionFilter("Arquivos .TXT", "txt");
        file.addChoosableFileFilter(filtroTXT);
        file.setFileFilter(filtroTXT);
        int returnVal = file.showOpenDialog(this);
        if (returnVal == JFileChooser.APPROVE_OPTION){
            arquivo = file.getSelectedFile();
            tf_pesquisar.setText(arquivo.getAbsolutePath());
            
            try{
                BufferedReader rd = new BufferedReader(new FileReader(arquivo));     
                StringBuffer sb = new StringBuffer();
                String linha;
                
                while((linha = rd.readLine())!= null){
                    sb.append(linha);
                    jTextArea2.append(linha+"\n");
                } rd.close();
               } catch(IOException err){
                JOptionPane.showMessageDialog(null, "Erro"+err);
               }

Desde já agradeço a todos.

Primeiro, você precisa identificar um padrão para a separação dos emails.
Espaço? Ponto? Vírgula? Ponto e vírgula? Pipe (|)?

Então, por ser um e-mail o único padrão que eu consegui imaginar seria o @, pensei que eu poderia ler o arquivo e para cada palavra que tiver o caracter @ eu pegue todo o conjunto de caracteres antes do @ até o primeiro espaço " " e para frente também, até o próximo espaço " ", acho que seria mais ou menos assim, o problema é que eu não faço idéia de como fazer isso. Não sei se dá pra fazer com substring, ou string.contains, sei que com estas dá pra identificar um caracter em especial, mas a parte de cortar o texto entre os espaços em branco, não sei como fazer.

Você disse

Se são emails, entendo que seja mais de um.
Logo, como estes vários emails estarão separados?

Desculpe, agora que entendi a sua pergunta, o arquivo vem como um memorando ou algo do gênero, vem textos e mais textos, paragrafos e tal, só que no meio do texto vai ter e-mails, não é uma lista de e-mails, tipo .csv ou tal.

Depois que eu verificar quais são e-mails da empresa, ai é que vou precisar gerar uma lista de e-mails, mas no arquivo que vai para o sistema vem um texto normal tipo um artigo de revista, memorando, carta ou algo do gênero.

Beleza pessoal, fiquei quebrando a cabeça alguns dias e finalmente consegui desenvolver uma forma de descobrir que palavra é e-mail de dentro do jtextarea, para depois filtrar por domínio.

Não sei se é a solução mais correta, se alguém quiser sugerir algo para melhorar.

Segue abaixo o código.

ArrayList<String>ListaDeEmails = new ArrayList<String>();        
int qtdLinhas = jTextArea2.getLineCount();
for(int i=0; i<qtdLinhas; i++)
        {
            try{
                int inicio = jTextArea2.getLineStartOffset(i);
                int fim    = jTextArea2.getLineEndOffset(i);
                String linha = jTextArea2.getText(inicio, fim - inicio);
                if(linha.contains("@"))                    
                {
                    int posicaoArroba, proxEspaco, espacoAnt;
                    String anteriorVazio;
                    posicaoArroba = linha.indexOf('@');
                    proxEspaco = linha.indexOf(' ', posicaoArroba);
                    espacoAnt = posicaoArroba-1;                    
                    while(espacoAnt > 0){
                        anteriorVazio = String.valueOf(linha.charAt(espacoAnt));
                        if(anteriorVazio.equals(" "))
                        {
                            ListaDeEmails.add(linha.substring(espacoAnt, proxEspaco));
                            //JOptionPane.showMessageDialog(null, "O espaco anterior é o : "+espacoAnt + " e o arroba e o : "+ posicaoArroba);
                            //JOptionPane.showMessageDialog(null, "O email é: "+ linha.substring(espacoAnt, proxEspaco));                            
                            break;
                        }
                        espacoAnt = espacoAnt-1;
                    }
                }
                
            }catch(BadLocationException ble){
                // Erros
            }
            
        }
        JOptionPane.showMessageDialog(null, Arrays.toString(ListaDeEmails.toArray()));

Ao invés desse if na linha 9 você tentou fazer:

Collections.addAll(ListaDeEmails , linha.split(" "));

será que você está complicando de mais?

Beleza MarcoAurelioBC,

Brother, eu tive que criar este if que vai da linha 9 até a 27, pois foi a unica solução que eu encontrei, pois não é uma lista de e-mails, os e-mails podem estar em qualquer parte do texto, a única referencia que eu tinha para iddentificar o e-mail foi o @, ai a minha lógica foi a seguinte:

Leia linha a linha até identificar o caracter @, ao encontrar, pegue próximo caracter de espaço e identifique como fim do e-mail, após localize o último caracter espaço antes do @, i identifique como inicio do e-mail, e após identificar o espaço anterior e o posterior ao carcter arroba, peque todo o conteudo entre estes caracteres, este será o e-mail.

Como eu informei no início, foi a única forma que eu consegui desenvolver, se você tiver uma idéia de otimização deste código, agradeço, vai ajudar muito.

A sim agora entendi, pra mim só tinha e-mails… :stuck_out_tongue: eu não consegui pensar de outra forma, qualquer coisa eu posto ai de novo.

Vlw