Pada bab sebelumnya kita telah mempelajari cara menggunakan objek kelas Scanner untuk mengurai data dalam string, jadi di bagian ini kita akan mempelajari cara menggunakan objek kelas Scanner untuk mengurai data dalam file.
Aplikasi mungkin perlu mengurai data khusus dalam file. Saat ini, aplikasi dapat membaca semua konten file ke dalam memori dan kemudian mengurai konten yang diperlukan. Keuntungannya adalah kecepatan pemrosesannya cepat, tetapi jika dibaca kontennya besar, akan menghabiskan lebih banyak memori berarti menukar ruang dengan waktu.
Bagian ini terutama memperkenalkan cara menggunakan kelas Pemindai dan ekspresi reguler untuk mengurai file, misalnya, untuk mengurai kata-kata khusus, angka, dan informasi lain dalam file. Ciri-ciri penggunaan kelas Scanner dan ekspresi reguler untuk mengurai file adalah waktu ditukar dengan ruang, yaitu kecepatan penguraian relatif lambat, tetapi memori tetap dihemat.
Buat objek Scanner dan arahkan ke file yang akan diurai, misalnya:
Filefile=file baru(halo.java);Scannersc=newScanner(file);
Kemudian sc menggunakan spasi sebagai pembatas dan memanggil metode next() untuk mengembalikan kata-kata dalam file secara berurutan. Jika kata terakhir dari file telah dikembalikan oleh metode next(), sc memanggil hasNext() untuk mengembalikan false, jika tidak maka akan kembali BENAR.
Selain itu, untuk kata-kata numerik, seperti 108, 167.92, dll., Anda dapat menggunakan metode nextInt() atau nextDouble() alih-alih metode next(), yaitu sc dapat memanggil nextInt() atau nextDouble() metode untuk mengubah kata numerik menjadi int atau data Ganda dikembalikan, namun penting untuk dicatat bahwa jika kata tersebut bukan kata numerik, InputMismatchException akan terjadi saat memanggil metode nextInt() atau nextDouble() Saat menangani pengecualian , metode next() dapat dipanggil untuk mengembalikan kata non-numerik.
Buat objek Scanner, arahkan ke file yang akan diurai, dan gunakan metode useDelimiter untuk menentukan ekspresi reguler sebagai tanda pembatas, misalnya:
Filefile=newFile(hello.java);Scannersc=newScanner(file);sc.useDelimiter(ekspresi reguler);
Kemudian sc menggunakan ekspresi reguler sebagai pembatas dan memanggil metode next() untuk mengembalikan kata-kata dalam file secara berurutan. Jika kata terakhir dari file telah dikembalikan oleh metode next(), sc akan memanggil hasNext() dan itu akan mengembalikan false, jika tidak maka akan mengembalikan true.
Selain itu, untuk kata-kata numerik, seperti 1979, 0.618, dll., Anda dapat menggunakan metode nextInt() atau nextDouble() alih-alih metode next(), yaitu sc dapat memanggil nextInt() atau nextDouble() metode untuk mengubah kata numerik menjadi data int atau Ganda dikembalikan, namun penting untuk dicatat bahwa jika kata tersebut bukan kata numerik, InputMismatchException akan terjadi saat memanggil metode nextInt() atau nextDouble() pengecualian, Anda dapat memanggil metode next() untuk mengembalikan kata non-numerik.
Misalnya, gunakan ekspresi reguler (cocok dengan semua string non-numerik) String regex=[^0123456789.]+ sebagai tanda yang dibatasi untuk mengurai nilai siswa dalam file student.txt dan menghitung nilai rata-rata.
pelajar.txt
Skor Zhang San adalah 70 poin, skor Li Si adalah 80 poin, dan skor Zhao Wu adalah 90 poin.
Kodenya adalah sebagai berikut:
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(skor rata-rata:+aver);}catch(Exceptionexp){System.out.println(exp);}}}