Exercices les collections en Java Série 01
Exercices les collections en Java Série 01
-
Exercice 01
-
Énoncé
- Écrire un programme JavaFX qui lit un fichier HTML et affiche la liste de toutes les balises HTML utilisées dans le fichier. La liste doit afficher une balise HTML par ligne.
- Indications :
- Utilisez la classe StringTokenizer pour repérer et extraire les balises HTML, en ignorant d’éventuels attributs. Par exemple, si la balise <a href= »https://apcpedagogie.com »> est repérée dans le fichier, le programme ne doit retenir que <a>.
- Le programme doit également extraire les balises fermantes du fichier, comme </a>, </p>, etc. (les balises <a> et </a> seront considérées comme deux balises différentes).
- Utilisez une structure d’ensemble, avec la classe HashSet, pour ajouter chaque balise extraite du fichier. À la fin du parcours du fichier, chaque balise ne figurera qu’une seule fois grâce à la propriété de la structure d’ensemble.
- Affichez la liste des balises triée par ordre alphabétique.
- Objectifs :
- Créer une interface JavaFX permettant à l’utilisateur de sélectionner et de lire un fichier HTML.
- Extraire toutes les balises HTML du fichier en utilisant StringTokenizer.
- Ajouter chaque balise à un HashSet pour garantir l’unicité des balises.
- Afficher les balises extraites dans une ListView JavaFX, une balise par ligne.
- (Facultatif) Trier les balises par ordre alphabétique avant de les afficher.
- Résultat attendu :
- L’application JavaFX doit permettre à l’utilisateur de sélectionner un fichier HTML, lire son contenu, extraire toutes les balises HTML, et les afficher dans une ListView. Chaque balise doit apparaître une seule fois dans la liste.
-
Solution
-
Exercice 02
-
Énoncé
- Écrire un programme JavaFX qui lit un fichier texte, établit la liste des mots rencontrés, et calcule le nombre d’occurrences de chaque mot. La liste doit afficher chaque mot et son nombre d’occurrences par ligne.
- Indications :
- Utilisez la classe StringTokenizer pour repérer et extraire les mots du fichier.
- Convertissez les éventuelles majuscules des mots en lettres minuscules afin d’éviter qu’un mot qui se trouve au début d’une phrase soit considéré comme un nouveau mot.
- Utilisez la classe HashMap pour établir la liste des paires mot-occurrences du mot.
- (Facultatif) Afficher la liste des mots triée par ordre décroissant du nombre d’occurrences.
- Objectifs :
- Créer une interface JavaFX permettant à l’utilisateur de sélectionner et de lire un fichier texte.
- Extraire tous les mots du fichier en utilisant StringTokenizer.
- Compter les occurrences de chaque mot en utilisant un HashMap.
- Afficher les mots et leurs occurrences dans une ListView JavaFX, un mot et son nombre d’occurrences par ligne.
- (Facultatif) Trier les mots par ordre décroissant du nombre d’occurrences avant de les afficher.
- Résultat attendu :
- L’application JavaFX doit permettre à l’utilisateur de sélectionner un fichier texte, lire son contenu, extraire tous les mots, et afficher chaque mot avec son nombre d’occurrences dans une ListView.
-
Solution
Cliquez ici
package application;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.control.ListView;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.TreeSet;
public class HtmlTagExtractorApp extends Application {
private ListView listView = new ListView<>();
private Set tagsSet = new HashSet<>();
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
TextField filePathField = new TextField();
filePathField.setPromptText("Chemin du fichier HTML");
Button browseButton = new Button("Parcourir");
browseButton.setOnAction(e -> {
FileChooser fileChooser = new FileChooser();
fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("Fichiers HTML", "*.html"));
File file = fileChooser.showOpenDialog(primaryStage);
if (file != null) {
filePathField.setText(file.getAbsolutePath());
readHtmlFile(file);
updateListView();
}
});
VBox vbox = new VBox(10, filePathField, browseButton, listView);
Scene scene = new Scene(vbox, 400, 500);
primaryStage.setTitle("HTML Tag Extractor");
primaryStage.setScene(scene);
primaryStage.show();
}
private void readHtmlFile(File file) {
tagsSet.clear();
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
String line;
while ((line = br.readLine()) != null) {
extractTagsFromLine(line);
}
} catch (IOException e) {
Alert alert = new Alert(AlertType.ERROR, "Erreur lors de la lecture du fichier : " + e.getMessage());
alert.showAndWait();
}
}
private void extractTagsFromLine(String line) {
StringTokenizer tokenizer = new StringTokenizer(line, "<> ", true);
boolean insideTag = false;
StringBuilder tag = new StringBuilder();
while (tokenizer.hasMoreTokens()) {
String token = tokenizer.nextToken();
if (token.equals("<")) {
insideTag = true;
tag.append(token);
} else if (token.equals(">")) {
tag.append(token);
if (insideTag) {
tagsSet.add(tag.toString());
tag.setLength(0);
insideTag = false;
}
} else if (insideTag) {
if (token.equals(" ")) {
tag.append(">");
tagsSet.add(tag.toString());
tag.setLength(0);
insideTag = false;
} else {
tag.append(token);
}
}
}
}
private void updateListView() {
listView.getItems().clear();
Set sortedTags = new TreeSet<>(tagsSet); // Trie les balises par ordre alphabétique
listView.getItems().addAll(sortedTags);
}
}
Cliquez ici
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.control.ListView;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.stream.Collectors;
public class WordCountApp extends Application {
private ListView listView = new ListView<>();
private Map wordCountMap = new HashMap<>();
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
TextField filePathField = new TextField();
filePathField.setPromptText("Chemin du fichier texte");
Button browseButton = new Button("Parcourir");
browseButton.setOnAction(e -> {
FileChooser fileChooser = new FileChooser();
fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("Fichiers texte", "*.txt"));
File file = fileChooser.showOpenDialog(primaryStage);
if (file != null) {
filePathField.setText(file.getAbsolutePath());
readTextFile(file);
updateListView();
}
});
VBox vbox = new VBox(10, filePathField, browseButton, listView);
Scene scene = new Scene(vbox, 400, 500);
primaryStage.setTitle("Word Count");
primaryStage.setScene(scene);
primaryStage.show();
}
private void readTextFile(File file) {
wordCountMap.clear();
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
String line;
while ((line = br.readLine()) != null) {
extractWordsFromLine(line);
}
} catch (IOException e) {
Alert alert = new Alert(AlertType.ERROR, "Erreur lors de la lecture du fichier : " + e.getMessage());
alert.showAndWait();
}
}
private void extractWordsFromLine(String line) {
StringTokenizer tokenizer = new StringTokenizer(line, " ,.!?;:\"()[]{}<>-");
while (tokenizer.hasMoreTokens()) {
String word = tokenizer.nextToken().toLowerCase();
wordCountMap.put(word, wordCountMap.getOrDefault(word, 0) + 1);
}
}
private void updateListView() {
listView.getItems().clear();
listView.getItems().addAll(
wordCountMap.entrySet().stream()
.sorted((e1, e2) -> e2.getValue().compareTo(e1.getValue())) // Trie par ordre décroissant du nombre d'occurrences
.map(e -> e.getKey() + " : " + e.getValue())
.collect(Collectors.toList())
);
}
}