Dans le chapitre précédent, nous avons appris à utiliser des objets de la classe Scanner pour analyser des données dans des chaînes. Dans cette section, nous apprendrons donc à utiliser des objets de la classe Scanner pour analyser des données dans des fichiers.
L'application peut avoir besoin d'analyser des données spéciales dans le fichier. À ce stade, l'application peut lire tout le contenu du fichier dans la mémoire, puis analyser le contenu requis. L'avantage est que la vitesse de traitement est rapide, mais si la lecture est rapide. le contenu est volumineux, il consommera Plus de mémoire signifie échanger de l'espace contre du temps.
Cette section présente principalement comment utiliser la classe Scanner et les expressions régulières pour analyser des fichiers, par exemple, pour analyser des mots spéciaux, des nombres et d'autres informations dans le fichier. La caractéristique de l'utilisation de la classe Scanner et des expressions régulières pour analyser des fichiers est que le temps est échangé contre de l'espace, c'est-à-dire que la vitesse d'analyse est relativement lente, mais la mémoire est économisée.
Créez un objet Scanner et pointez sur le fichier à analyser, par exemple :
Filefile=newFile(bonjour.java);Scannersc=newScanner(file);
Ensuite, sc utilise des espaces comme délimiteurs et appelle la méthode next() pour renvoyer les mots du fichier dans l'ordre. Si le dernier mot du fichier a été renvoyé par la méthode next(), sc appelle hasNext() pour renvoyer false, sinon il renvoie. vrai.
De plus, pour les mots numériques, tels que 108, 167,92, etc., vous pouvez utiliser la méthode nextInt() ou nextDouble() au lieu de la méthode next(), c'est-à-dire que sc peut appeler nextInt() ou nextDouble(). La méthode pour convertir les mots numériques en données int ou Double est renvoyée, mais il est important de noter que si le mot n'est pas un mot numérique, une exception InputMismatchException se produira lors de l'appel de la méthode nextInt() ou nextDouble() lors de la gestion de l'exception. , la méthode next() peut être appelée pour renvoyer le mot non numérique.
Créez un objet Scanner, pointez sur le fichier à analyser et utilisez la méthode useDelimiter pour spécifier l'expression régulière comme marque de délimiteur, par exemple :
Filefile=newFile(hello.java);Scannersc=newScanner(file);sc.useDelimiter(regular expression);
Ensuite, sc utilise l'expression régulière comme délimiteur et appelle la méthode next() pour renvoyer les mots du fichier dans l'ordre. Si le dernier mot du fichier a été renvoyé par la méthode next(), sc appelle hasNext() et il. renverra faux, sinon il renverra vrai.
De plus, pour les mots numériques, tels que 1979, 0,618, etc., vous pouvez utiliser la méthode nextInt() ou nextDouble() au lieu de la méthode next(), c'est-à-dire que sc peut appeler nextInt() ou nextDouble(). La méthode pour convertir les mots numériques en données int ou Double est renvoyée, mais il est important de noter que si le mot n'est pas un mot numérique, une exception InputMismatchException se produira lors de l'appel de la méthode nextInt() ou nextDouble() puis lors de la gestion de la méthode. exception, vous pouvez appeler la méthode next() pour renvoyer le mot non numérique.
Par exemple, utilisez l'expression régulière (correspond à toutes les chaînes non numériques) String regex=[^0123456789.]+ comme marque délimitée pour analyser les notes des étudiants dans le fichier student.txt et calculer la note moyenne.
étudiant.txt
Le score de Zhang San est de 70 points, celui de Li Si est de 80 points et celui de Zhao Wu est de 90 points.
Le code est le suivant :
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(average score:+aver);}catch(Exceptionexp){System.out.println(exp);}}}