Techniques avancées de la classe Scanner
Techniques de délimiteurs personnalisés
Configuration des délimiteurs
import java.util.Scanner;
public class CustomDelimiterDemo {
public static void main(String[] args) {
// Utilisation d'un délimiteur personnalisé
String input = "apple,banana;orange:grape";
Scanner scanner = new Scanner(input).useDelimiter("[,;:]");
while (scanner.hasNext()) {
System.out.println(scanner.next());
}
scanner.close();
}
}
Types de délimiteurs
Type de délimiteur |
Cas d'utilisation |
Exemple |
Virgule |
Analyse CSV |
"1,2,3,4" |
Espace blanc |
Séparation de jetons |
"hello world" |
Expression rationnelle |
Analyse complexe |
"[,;:]" |
Analyse avancée d'entrée
public class AdvancedParsingDemo {
public static void parseComplexInput(String input) {
Scanner scanner = new Scanner(input);
scanner.useDelimiter("\\s*,\\s*");
while (scanner.hasNext()) {
if (scanner.hasNextInt()) {
System.out.println("Entier : " + scanner.nextInt());
} else {
System.out.println("Chaîne : " + scanner.next());
}
}
scanner.close();
}
}
Flux de travail d'analyse avec la classe Scanner
graph TD
A[Chaîne d'entrée] --> B[Configurer le scanner]
B --> C{Analyser les jetons}
C -->|Entier| D[Traiter l'entier]
C -->|Chaîne| E[Traiter la chaîne]
D, E --> F{Y a-t-il plus de jetons?}
F -->|Oui| C
F -->|Non| G[Fermer le scanner]
Techniques de lecture de fichiers
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class FileReadingDemo {
public static void readFileWithScanner(String filepath) {
try (Scanner scanner = new Scanner(new File(filepath))) {
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
processLine(line);
}
} catch (FileNotFoundException e) {
System.err.println("Fichier non trouvé : " + filepath);
}
}
private static void processLine(String line) {
// Logique de traitement personnalisée de la ligne
System.out.println(line);
}
}
Technique d'optimisation |
Description |
Try-with-resources |
Gestion automatique des ressources |
Lecture bufferisée |
Efficace pour les grands fichiers |
Analyse sélective |
Traiter seulement les jetons nécessaires |
Validation avancée d'entrée
public class InputValidator {
public static boolean validateInput(Scanner scanner,
InputType type) {
switch(type) {
case INTEGER:
return scanner.hasNextInt();
case DOUBLE:
return scanner.hasNextDouble();
case EMAIL:
return validateEmail(scanner.next());
default:
return false;
}
}
private static boolean validateEmail(String email) {
// Logique complexe de validation d'email
return email.contains("@");
}
}
graph LR
A[Entrée du scanner] --> B{Stratégie d'analyse}
B -->|Efficace| C[Traitement optimisé]
B -->|Inefficace| D[Surcoût de performance]
Meilleures pratiques pour les apprentis LabEx
- Utiliser les délimiteurs appropriés
- Mettre en œuvre une gestion d'erreurs robuste
- Fermer les ressources du scanner
- Choisir des stratégies d'analyse efficaces
- Valider l'entrée avant de la traiter
Conclusion
Les techniques avancées de la classe Scanner nécessitent une compréhension approfondie de l'analyse d'entrée, de la configuration des délimiteurs et de l'optimisation des performances. En maîtrisant ces techniques, les développeurs peuvent créer des applications Java plus robustes et efficaces.