1
resposta

Minha resolução da aula - Uso de Scanner

Segue minha implementação da aula.

Classe Principal:

package br.com.alura.threads.busca_textual;

import java.util.Scanner;

public class Principal {

    public static void main(String[] args) throws InterruptedException {

        try {
            
            // Thread não tem uma ordem de execução!

            Scanner scanner = new Scanner(System.in);

            String nomeArquivo = "";

            System.out.print("Digite o nome a ser procurado: ");
            String nomeBuscado = scanner.next();

            System.out.println("Digite a  op\u00E7\u00E3o de arquivo a ser procurado: ");
            System.out.println("[1] - assinaturas1.txt");
            System.out.println("[2] - assinaturas2.txt");
            System.out.println("[3] - autores.txt");
            Integer opcaoEscolhida = scanner.nextInt();

            switch (opcaoEscolhida) {
            case 1:
                nomeArquivo = "src/br/com/alura/threads/busca_textual/assinaturas1.txt";
                chamaThread(nomeBuscado, nomeArquivo);
                break;
            case 2:
                nomeArquivo = "src/br/com/alura/threads/busca_textual/assinaturas2.txt";
                chamaThread(nomeBuscado, nomeArquivo);
                break;
            case 3:
                nomeArquivo = "src/br/com/alura/threads/busca_textual/autores.txt";
                chamaThread(nomeBuscado, nomeArquivo);
                break;
            default:
                scanner.close();
                throw new IllegalArgumentException("N\u00E3o existe essa op\u00E7\u00E3o! Tente novamente!");

            }

            scanner.close();

        } catch (IllegalArgumentException e) {
            System.err.println(e.getMessage());
        }

    }

    public static void chamaThread(String nomeBuscado, String nomeArquivo) throws InterruptedException {
        Runnable nomeAProcurar = new BuscaNomes(nomeBuscado, nomeArquivo);
        Thread thread = new Thread(nomeAProcurar, "Thread_" + nomeArquivo);

        Thread.sleep(250);

        thread.start();

    }

}

Classe de busca de nomes:

package br.com.alura.threads.busca_textual;

import java.io.File;

import java.io.FileNotFoundException;
import java.util.Scanner;

public class BuscaNomes implements Runnable {

    private String nomeArquivo;
    private String nomeBuscado;

    public BuscaNomes(String nomeBuscado, String nomeArquivo) {
        this.nomeBuscado = nomeBuscado;
        this.nomeArquivo = nomeArquivo;
    }

    @Override
    public void run() {

        try {
            Scanner scanner = new Scanner(new File(nomeArquivo));

            Integer numLinha = 1;

            while (scanner.hasNextLine()) {
                String linha = scanner.nextLine();

                if (linha.toLowerCase().contains(nomeBuscado.toLowerCase())) {
                    System.out.format("Encontrei o nome %s na linha %d no arquivo %s! Boa!", linha, numLinha,
                            nomeArquivo);
                    return;
                }

                numLinha += 1;
            }

            System.out.format("O nome %s n\u00E3o foi encontrado no arquivo %s! Que pena!", nomeBuscado, nomeArquivo);

        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        }

    }

}

Alguma sugestão?

Obrigado!

1 resposta

Olá Gustavo, tudo bem com você?

Meus parabéns pela implementação do código. Sua proposta atende bem o objetivo do projeto. Vi que você foi além do proposto na atividade e fez o uso do Unicode no momento da impressão das mensagens para o usuário, assim será garantido que os caracteres especiais sejam corretamente exibidos em qualquer ambiente que suporte Unicode, independentemente da configuração de codificação do arquivo ou do sistema.

Continue mergulhando em conhecimento e não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Em caso de dúvidas estou à disposição.

Abraços e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software