Programação java: ler uma linha de cada vez

Nesta listagem de código Java, o payOneEmployee

Método ilustra alguns truques úteis para a leitura de dados. Em particular, cada scanner que você cria tem um nextLine método. (Você não pode usar este nextLine método, mas o método está disponível, no entanto.)

Video: Video Aula Java - 28 Ler Arquivo

Quando você chama um scanner de nextLine método, o método agarra tudo até o final da linha atual do texto. Neste perfil, uma chamada para nextLine pode ler uma linha inteira do EmployeeInfo.txt Arquivo. (Em outro programa, um scanner de nextLine chamada pode ler tudo o que o usuário digita no teclado até a prensagem da tecla Enter.)

classe DoPayroll importação java.util.Scanner-import java.io.File-import java.io.IOException-pública {void main (args String []) public static lança IOException {Scanner diskScanner = new Scanner (new File ("EmployeeInfo.txt")) - para (int empnum = 1- empnum lt; = 3- empnum ++) {payOneEmployee (diskScanner) -} diskScanner.close () -} payOneEmployee static void (aScanner Scanner) {empregado anEmployee = novo empregado () - anEmployee.setName (aScanner.nextLine ()) - anEmployee. setJobTitle (aScanner.nextLine ()) - anEmployee.cutCheck (aScanner.nextDouble ()) - aScanner.nextLine () -}}

Observe a escolha cuidadosa de palavras: nextLine lê tudo até o fim da linha atual. Infelizmente, o que significa ler até o final da linha atual nem sempre é o que você acha que isso significa. misturando nextInt, nextDouble, e nextLine chamadas podem ser confuso. Você tem que assistir o que está fazendo e verificar a saída do seu programa cuidadosamente.

Video: Coisas que eu gostaria que alguém tivesse me dito quando eu estava aprendendo a programar

Para entender tudo isso, você precisa ser dolorosamente consciente de quebras de linha de um arquivo de dados. Pense em uma quebra de linha como um personagem extra, preso entre uma linha de texto e no próximo. Então imagine que a chamada nextLine significa ler tudo até e incluindo a próxima quebra de linha.

Agora, dê uma olhada nesta figura.

exemplo visual de como Java verifica o conteúdo em seus programas.

  • Se uma chamada para nextLineBarry Burd [LineBreak], a chamada subsequente para nextLineCEO [LineBreak].



  • Se uma chamada para nextDouble lê o número 5000.00, a chamada subsequente para nextLine lê o [LineBreak] que vem imediatamente após o número 5000.00. (Isso é tudo o nextLine lê - um [LineBreak] e nada mais.)

  • Se uma chamada para nextLine lê o [LineBreak] após o número 5000.00, a chamada subsequente para nextLineHarriet Ritter [LineBreak].

Então, depois de ler o número 5000.00, você precisa dois chama a nextLine a fim de recolher o nome Harriet Ritter. O erro que você costuma fazer é esquecer a primeira dessas duas chamadas.

Olhe novamente para o arquivo na figura. Para código desta seção para funcionar corretamente, você deve ter uma quebra de linha após a última 10000.00. Se não o fizer, a chamada final para nextLine faz o seu programa de bater e queimar. A mensagem de erro lê NoSuchElementException: Nenhuma linha encontrada.

Você pode se surpreender com o número de peculiaridades que você encontra em métodos de digitalização de cada linguagem de programação. Por exemplo, o primeiro nextLine que lê a partir do arquivo na figura devora Barry Burd [LineBreak] a partir do arquivo.

Mas isso nextLine chamada entrega Barry Burd (Sem qualquer quebra de linha) para o código de execução. assim nextLine procura por uma quebra de linha, e em seguida nextLine perde a quebra de linha. Sim, este é um ponto sutil. E não, este ponto sutil quase nunca causa problemas para ninguém.

Se esse negócio de nextDouble e nextLine confunde você, por favor não colocar a culpa em Java. Misturando chamadas de entrada é delicado trabalho em qualquer linguagem de programação de computador. E a coisa realmente desagradável é que cada linguagem de programação aborda o problema um pouco diferente.

O que você descobriu sobre nextLine em Java ajuda a compreender as questões, quando você começa a conhecer C ++ ou Visual Basic, mas não dizer-lhe todos os detalhes. detalhes de cada língua são exclusivas para esse idioma.


Publicações relacionadas