No capítulo anterior aprendemos como usar objetos da classe Scanner para analisar dados em strings, portanto nesta seção aprenderemos como usar objetos da classe Scanner para analisar dados em arquivos.
O aplicativo pode precisar analisar dados especiais no arquivo. Neste momento, o aplicativo pode ler todo o conteúdo do arquivo na memória e depois analisar o conteúdo necessário. A vantagem é que a velocidade de processamento é rápida, mas se a leitura. o conteúdo for grande, consumirá mais memória significa trocar espaço por tempo.
Esta seção apresenta principalmente como usar a classe Scanner e expressões regulares para analisar arquivos, por exemplo, para analisar palavras especiais, números e outras informações no arquivo. A característica de usar a classe Scanner e expressões regulares para analisar arquivos é que o tempo é trocado por espaço, ou seja, a velocidade de análise é relativamente lenta, mas a memória é economizada.
Crie um objeto Scanner e aponte para o arquivo a ser analisado, por exemplo:
Filefile=newFile(hello.java);Scannersc=newScanner(file);
Então sc usa espaços como delimitadores e chama o método next() para retornar as palavras do arquivo em sequência. Se a última palavra do arquivo foi retornada pelo método next(), sc chama hasNext() para retornar false, caso contrário, ele retorna. verdadeiro.
Além disso, para palavras numéricas, como 108, 167,92, etc., você pode usar o método nextInt() ou nextDouble() em vez do método next(), ou seja, sc pode chamar nextInt() ou nextDouble() para converter as palavras numéricas em dados int ou Double é retornado, mas é importante observar que se a palavra não for uma palavra numérica, uma InputMismatchException ocorrerá ao chamar o método nextInt() ou nextDouble() ao manipular a exceção. , o método next() pode ser chamado para retornar a palavra não numérica.
Crie um objeto Scanner, aponte para o arquivo a ser analisado e use o método useDelimiter para especificar a expressão regular como marca delimitadora, por exemplo:
Filefile=newFile(hello.java);Scannersc=newScanner(file);sc.useDelimiter(expressão regular);
Então sc usa a expressão regular como delimitador e chama o método next() para retornar as palavras do arquivo em sequência. Se a última palavra do arquivo foi retornada pelo método next(), sc chama hasNext() e ela. retornará falso, caso contrário retornará verdadeiro.
Além disso, para palavras numéricas, como 1979, 0,618, etc., você pode usar o método nextInt() ou nextDouble() em vez do método next(), ou seja, sc pode chamar nextInt() ou nextDouble() para converter as palavras numéricas em dados int ou Double é retornado, mas é importante observar que se a palavra não for uma palavra numérica, ocorrerá uma InputMismatchException ao chamar o método nextInt() ou nextDouble() Then ao manipular o método nextInt() ou nextDouble() Then. exceção, você pode chamar o método next() para retornar a palavra não numérica.
Por exemplo, use a expressão regular (corresponde a todas as strings não numéricas) String regex=[^0123456789.]+ como a marca delimitada para analisar as notas dos alunos no arquivo student.txt e calcular a nota média.
aluno.txt
A pontuação de Zhang San é de 70 pontos, a pontuação de Li Si é de 80 pontos e a pontuação de Zhao Wu é de 90 pontos.
O código é o seguinte:
importjava.io.*;importjava.util.*;publicclassMain{publicstaticvoidmain(Stringargs[]){Filefile=newFile(student.txt);Scannersc=null;intcount=0;doublesum=0;try{doublescore=0;sc= newScanner(arquivo);sc.useDelimiter([^0123456789.]+);while(sc.hasNextDouble()){score=sc.nextDouble();count++;sum=sum+score;System.out.println(score) ;}doubleaver=soma/contagem;System.out.println(pontuação média:+aver);}catch(Exceptionexp){System.out.println(exp);}}}