В предыдущей главе мы узнали, как использовать объекты класса Scanner для анализа данных в строках, поэтому в этом разделе мы научимся использовать объекты класса Scanner для анализа данных в файлах.
Приложению может потребоваться проанализировать специальные данные в файле. В это время приложение может прочитать все содержимое файла в памяти, а затем проанализировать необходимый контент. Преимущество состоит в том, что скорость обработки высокая, но при чтении. контент большой, он будет потреблять больше памяти, что означает обмен места на время.
В этом разделе в основном рассказывается, как использовать класс Scanner и регулярные выражения для анализа файлов, например для анализа специальных слов, чисел и другой информации в файле. Особенностью использования класса Scanner и регулярных выражений для разбора файлов является то, что время обменивается на пространство, то есть скорость разбора относительно низкая, но память сохраняется.
Создайте объект Сканер и укажите файл для анализа, например:
Filefile=newFile(hello.java);Scannersc=newScanner(файл);
Затем sc использует пробелы в качестве разделителей и вызывает метод next() для последовательного возврата слов в файле. Если последнее слово файла было возвращено методом next(), sc вызывает hasNext(), чтобы вернуть false, в противном случае он возвращает значение false. истинный.
Кроме того, для числовых слов, таких как 108, 167,92 и т. д., вы можете использовать метод nextInt() или nextDouble() вместо метода next(), то есть sc может вызывать методы nextInt() или nextDouble(). возвращается метод для преобразования числовых слов в данные типа int или Double, но важно отметить, что если слово не является числовым, при вызове метода nextInt() или nextDouble() при обработке исключения возникнет исключение InputMismatchException. , можно вызвать метод next() для возврата нечислового слова.
Создайте объект Scanner, укажите файл для анализа и используйте метод useDelimiter, чтобы указать регулярное выражение в качестве знака-разделителя, например:
Filefile=newFile(hello.java);Scannersc=newScanner(файл);sc.useDelimiter(регулярное выражение);
Затем sc использует регулярное выражение в качестве разделителя и вызывает метод next() для последовательного возврата слов в файле. Если последнее слово файла было возвращено методом next(), sc вызывает hasNext() и он. вернет false, иначе вернет true.
Кроме того, для числовых слов, таких как 1979, 0,618 и т. д., вы можете использовать метод nextInt() или nextDouble() вместо метода next(), то есть sc может вызывать методы nextInt() или nextDouble(). возвращается метод для преобразования числовых слов в данные типа int или Double, но важно отметить, что если слово не является числовым, при вызове метода nextInt() или nextDouble() возникнет исключение InputMismatchException. Затем при обработке метода. исключения, вы можете вызвать метод next(), чтобы вернуть нечисловое слово.
Например, используйте регулярное выражение (соответствует всем нечисловым строкам) String regex=[^0123456789.]+ в качестве знака-разделителя для анализа оценок учащихся в файле Student.txt и расчета средней оценки.
студент.txt
Оценка Чжан Саня составляет 70 очков, оценка Ли Си - 80 очков, а оценка Чжао Ву - 90 очков.
Код выглядит следующим образом:
importjava.io.*;importjava.util.*;publicclassMain{publicstaticvoidmain(Stringargs[]){Filefile=newFile(student.txt);Scannersc=null;intcount=0;doublesum=0;try{doublescore=0;sc= newScanner(file);sc.useDelimiter([^0123456789.]+); while(sc.hasNextDouble()){score=sc.nextDouble();count++;sum=sum+score;System.out.println(score) ;}doubleaver=sum/count;System.out.println(средний балл:+aver);}catch(Exceptionexp){System.out.println(exp);}}}