La programmation orientée objets et le langage Java
Transcription
La programmation orientée objets et le langage Java
La programmation orientée objets et le langage Java Master BBSG 2 Laurent Tichit Département Informatique et Interactions, Faculté des Sciences de Luminy Cours 5: Quelques éléments de la bibliothèque standard c L. Tichit, 2015-2016 POO et Java 1/1 Éléments de la bibliothèque Types énumérés Le besoin : manipuler des ensembles finis de données conventionnelles : { lundi, mardi, ... dimanche }, { nord, sud, est, ouest }, etc. c L. Tichit, 2015-2016 POO et Java 2/1 Éléments de la bibliothèque Types énumérés Le besoin : manipuler des ensembles finis de données conventionnelles : { lundi, mardi, ... dimanche }, { nord, sud, est, ouest }, etc. Ces données sont très symboliques c L. Tichit, 2015-2016 POO et Java 2/1 Éléments de la bibliothèque Types énumérés Le besoin : manipuler des ensembles finis de données conventionnelles : { lundi, mardi, ... dimanche }, { nord, sud, est, ouest }, etc. Ces données sont très symboliques sont atomiques (simples, comme des entiers) c L. Tichit, 2015-2016 POO et Java 2/1 Éléments de la bibliothèque Types énumérés Le besoin : manipuler des ensembles finis de données conventionnelles : { lundi, mardi, ... dimanche }, { nord, sud, est, ouest }, etc. Ces données sont très symboliques sont atomiques (simples, comme des entiers) forment des ensembles finis c L. Tichit, 2015-2016 POO et Java 2/1 Éléments de la bibliothèque Types énumérés Le besoin : manipuler des ensembles finis de données conventionnelles : { lundi, mardi, ... dimanche }, { nord, sud, est, ouest }, etc. Ces données sont très symboliques sont atomiques (simples, comme des entiers) forment des ensembles finis forment des ensembles disjoints c L. Tichit, 2015-2016 POO et Java 2/1 Éléments de la bibliothèque Types énumérés Le besoin : manipuler des ensembles finis de données conventionnelles : { lundi, mardi, ... dimanche }, { nord, sud, est, ouest }, etc. Ces données sont très symboliques sont atomiques (simples, comme des entiers) forment des ensembles finis forment des ensembles disjoints Jusqu’à Java 1.4 public class JourSemaine { public static final int public static final int public static final int public static final int public static final int public static final int public static final int } c L. Tichit, 2015-2016 LUNDI = 0; MARDI = 1; MERCREDI = 2; JEUDI = 3; VENDREDI = 4; SAMEDI = 5; DIMANCHE = 6; POO et Java 2/1 Éléments de la bibliothèque Types énumérés Le besoin : manipuler des ensembles finis de données conventionnelles : { lundi, mardi, ... dimanche }, { nord, sud, est, ouest }, etc. Ces données sont très symboliques sont atomiques (simples, comme des entiers) forment des ensembles finis forment des ensembles disjoints Jusqu’à Java 1.4 public class JourSemaine { public static final int public static final int public static final int public static final int public static final int public static final int public static final int } c L. Tichit, 2015-2016 A partir de Java 5 LUNDI = 0; MARDI = 1; MERCREDI = 2; JEUDI = 3; VENDREDI = 4; SAMEDI = 5; DIMANCHE = 6; POO et Java public enum JourSemaine { LUNDI, MARDI, MERCREDI, JEUDI, VENDREDI, SAMEDI, DIMANCHE } 2/1 Éléments de la bibliothèque Types énumérés Jusqu’à Java 1.4 public class JourSemaine { public static final int public static final int public static final int public static final int public static final int public static final int public static final int } A partir de Java 5 LUNDI = 0; MARDI = 1; MERCREDI = 2; JEUDI = 3; VENDREDI = 4; SAMEDI = 5; DIMANCHE = 6; public enum JourSemaine { LUNDI, MARDI, MERCREDI, JEUDI, VENDREDI, SAMEDI, DIMANCHE } Emploi. Dans le premier cas : int jour; ... jour = JourSemaine.MERCREDI; c L. Tichit, 2015-2016 POO et Java 3/1 Éléments de la bibliothèque Types énumérés Jusqu’à Java 1.4 public class JourSemaine { public static final int public static final int public static final int public static final int public static final int public static final int public static final int } A partir de Java 5 LUNDI = 0; MARDI = 1; MERCREDI = 2; JEUDI = 3; VENDREDI = 4; SAMEDI = 5; DIMANCHE = 6; public enum JourSemaine { LUNDI, MARDI, MERCREDI, JEUDI, VENDREDI, SAMEDI, DIMANCHE } Emploi. Dans le premier cas : int jour; ... jour = JourSemaine.MERCREDI; Dans le second : JourSemaine jour; ... jour = JourSemaine.MERCREDI; c L. Tichit, 2015-2016 POO et Java 3/1 Éléments de la bibliothèque Méthodes des types énumérés String toString() – exemple : JourSemaine.LUNDI.toString() → "LUNDI" c L. Tichit, 2015-2016 POO et Java 4/1 Éléments de la bibliothèque Méthodes des types énumérés String toString() – exemple : JourSemaine.LUNDI.toString() → "LUNDI" static JourSemaine valueOf(String nom) – réciproque de la précédente : JourSemaine.valueOf("MARDI") → JourSemaine.MARDI c L. Tichit, 2015-2016 POO et Java 4/1 Éléments de la bibliothèque Méthodes des types énumérés String toString() – exemple : JourSemaine.LUNDI.toString() → "LUNDI" static JourSemaine valueOf(String nom) – réciproque de la précédente : JourSemaine.valueOf("MARDI") → JourSemaine.MARDI int ordinal() – rang (dans l’ordre de la déclaration) : JourSemaine.MERCREDI.ordinal() → 2 c L. Tichit, 2015-2016 POO et Java 4/1 Éléments de la bibliothèque Méthodes des types énumérés String toString() – exemple : JourSemaine.LUNDI.toString() → "LUNDI" static JourSemaine valueOf(String nom) – réciproque de la précédente : JourSemaine.valueOf("MARDI") → JourSemaine.MARDI int ordinal() – rang (dans l’ordre de la déclaration) : JourSemaine.MERCREDI.ordinal() → 2 static JourSemaine[] values() – tableau contenant toutes les valeurs du type : JourSemaine.LUNDI ... JourSemaine.DIMANCHE c L. Tichit, 2015-2016 POO et Java 4/1 Éléments de la bibliothèque Méthodes des types énumérés String toString() – exemple : JourSemaine.LUNDI.toString() → "LUNDI" static JourSemaine valueOf(String nom) – réciproque de la précédente : JourSemaine.valueOf("MARDI") → JourSemaine.MARDI int ordinal() – rang (dans l’ordre de la déclaration) : JourSemaine.MERCREDI.ordinal() → 2 static JourSemaine[] values() – tableau contenant toutes les valeurs du type : JourSemaine.LUNDI ... JourSemaine.DIMANCHE Exemple : trouver le jour suivant un jour donné : public enum JourSemaine { LUNDI, MARDI, MERCREDI, JEUDI, VENDREDI, SAMEDI, DIMANCHE; public JourSemaine lendemain() { return values()[(ordinal() + 1) % values().length]; } } c L. Tichit, 2015-2016 POO et Java 4/1 Éléments de la bibliothèque Collections et dictionnaires interfaces classes Collection c L. Tichit, 2015-2016 collection la plus générale void add(Object element) int size() boolean contains(Object valeur) POO et Java 5/1 Éléments de la bibliothèque Collections et dictionnaires interfaces classes Collection List c L. Tichit, 2015-2016 collection la plus générale void add(Object element) int size() boolean contains(Object valeur) une collection qu’on peut voir comme une séquence void add(int index, Object element) Object get(int index) POO et Java 5/1 Éléments de la bibliothèque Collections et dictionnaires interfaces classes Collection List ArrayList c L. Tichit, 2015-2016 collection la plus générale void add(Object element) int size() boolean contains(Object valeur) une collection qu’on peut voir comme une séquence void add(int index, Object element) Object get(int index) tableau (accès indexé optimisé) qui grandit automatiquement POO et Java 5/1 Éléments de la bibliothèque Collections et dictionnaires interfaces classes Collection List ArrayList Vector c L. Tichit, 2015-2016 collection la plus générale void add(Object element) int size() boolean contains(Object valeur) une collection qu’on peut voir comme une séquence void add(int index, Object element) Object get(int index) tableau (accès indexé optimisé) qui grandit automatiquement Idem. De plus, les Vector sont synchronisés POO et Java 5/1 Éléments de la bibliothèque Collections et dictionnaires interfaces classes Collection List ArrayList Vector LinkedList c L. Tichit, 2015-2016 collection la plus générale void add(Object element) int size() boolean contains(Object valeur) une collection qu’on peut voir comme une séquence void add(int index, Object element) Object get(int index) tableau (accès indexé optimisé) qui grandit automatiquement Idem. De plus, les Vector sont synchronisés liste chaı̂née (optimise les insertions et suppressions internes) POO et Java 5/1 Éléments de la bibliothèque Collections et dictionnaires interfaces classes Collection List ArrayList Vector LinkedList Set c L. Tichit, 2015-2016 collection la plus générale void add(Object element) int size() boolean contains(Object valeur) une collection qu’on peut voir comme une séquence void add(int index, Object element) Object get(int index) tableau (accès indexé optimisé) qui grandit automatiquement Idem. De plus, les Vector sont synchronisés liste chaı̂née (optimise les insertions et suppressions internes) collection sans répétition (optimise le test d’appartenance) POO et Java 5/1 Éléments de la bibliothèque Collections et dictionnaires interfaces classes ArrayList Vector LinkedList collection la plus générale void add(Object element) int size() boolean contains(Object valeur) une collection qu’on peut voir comme une séquence void add(int index, Object element) Object get(int index) tableau (accès indexé optimisé) qui grandit automatiquement Idem. De plus, les Vector sont synchronisés liste chaı̂née (optimise les insertions et suppressions internes) HashSet TreeSet collection sans répétition (optimise le test d’appartenance) efficacité maximale les éléments doivent être ordonnés ; le parcours respecte cet ordre Collection List Set c L. Tichit, 2015-2016 POO et Java 5/1 Éléments de la bibliothèque Collections et dictionnaires interfaces classes ArrayList Vector LinkedList collection la plus générale void add(Object element) int size() boolean contains(Object valeur) une collection qu’on peut voir comme une séquence void add(int index, Object element) Object get(int index) tableau (accès indexé optimisé) qui grandit automatiquement Idem. De plus, les Vector sont synchronisés liste chaı̂née (optimise les insertions et suppressions internes) HashSet TreeSet collection sans répétition (optimise le test d’appartenance) efficacité maximale les éléments doivent être ordonnés ; le parcours respecte cet ordre Collection List Set table associative, faite de couples (clé, valeur) Map c L. Tichit, 2015-2016 POO et Java 5/1 Éléments de la bibliothèque Collections et dictionnaires interfaces classes ArrayList Vector LinkedList collection la plus générale void add(Object element) int size() boolean contains(Object valeur) une collection qu’on peut voir comme une séquence void add(int index, Object element) Object get(int index) tableau (accès indexé optimisé) qui grandit automatiquement Idem. De plus, les Vector sont synchronisés liste chaı̂née (optimise les insertions et suppressions internes) HashSet TreeSet collection sans répétition (optimise le test d’appartenance) efficacité maximale les éléments doivent être ordonnés ; le parcours respecte cet ordre Collection List Set Map HashMap TreeMap c L. Tichit, 2015-2016 table associative, faite de couples (clé, valeur) efficacité maximale les clés doivent être ordonnées ; le parcours reflète l’ordre POO et Java 5/1 Éléments de la bibliothèque Parcours des collections Pour parcourir une collection on utilise un itérateur : public interface Iterator { boolean hasNext(); renvoie true si l’itération n’est pas finie, à la manière de i < tab.length Object next(); renvoie le prochain élément et fait avancer l’itération, à la manière de tab[i++] void remove(); supprime l’élément en cours (peu utile, souvent inopérant) } c L. Tichit, 2015-2016 POO et Java 6/1 Éléments de la bibliothèque Parcours des collections Pour parcourir une collection on utilise un itérateur : public interface Iterator { boolean hasNext(); renvoie true si l’itération n’est pas finie, à la manière de i < tab.length Object next(); renvoie le prochain élément et fait avancer l’itération, à la manière de tab[i++] void remove(); supprime l’élément en cours (peu utile, souvent inopérant) } les itérateurs sont créés et initialisés par les collections elles-mêmes : Iterator iter = uneCollection.iterator(); création d’une itération sur les éléments de uneCollection c L. Tichit, 2015-2016 POO et Java 6/1 Éléments de la bibliothèque Parcours des collections Exemple. La méthode cumul additionne les éléments d’une collection de nombres : double cumul(Collection suiteDeNombres) { /* Les éléments de suiteDeNombres doivent être des objets Double */ c L. Tichit, 2015-2016 POO et Java 7/1 Éléments de la bibliothèque Parcours des collections Exemple. La méthode cumul additionne les éléments d’une collection de nombres : double cumul(Collection suiteDeNombres) { /* Les éléments de suiteDeNombres doivent être des objets Double */ double result = 0; Iterator iter = suiteDeNombres.iterator(); while (iter.hasNext()) result = result + iter.next() ; return result; } c L. Tichit, 2015-2016 POO et Java 7/1 Éléments de la bibliothèque Parcours des collections Exemple. La méthode cumul additionne les éléments d’une collection de nombres : double cumul(Collection suiteDeNombres) { /* Les éléments de suiteDeNombres doivent être des objets Double */ double result = 0; Iterator iter = suiteDeNombres.iterator(); while (iter.hasNext()) result = result + (Double) iter.next() ; return result; } c L. Tichit, 2015-2016 POO et Java 7/1 Éléments de la bibliothèque Parcours des collections Exemple. La méthode cumul additionne les éléments d’une collection de nombres : double cumul(Collection suiteDeNombres) { /* Les éléments de suiteDeNombres doivent être des objets Double */ double result = 0; Iterator iter = suiteDeNombres.iterator(); while (iter.hasNext()) result = result + ((Double) iter.next()).doubleValue(); return result; } c L. Tichit, 2015-2016 POO et Java 7/1 Éléments de la bibliothèque Parcours des collections Exemple. La méthode cumul additionne les éléments d’une collection de nombres : double cumul(Collection suiteDeNombres) { /* Les éléments de suiteDeNombres doivent être des objets Double */ double result = 0; Iterator iter = suiteDeNombres.iterator(); while (iter.hasNext()) result = result + ((Double) iter.next()).doubleValue(); return result; } essai de cette méthode : void test() { List donnees = new ArrayList(); for (int i = 0; i < 5; i++) donnees.add(new Double(Math.random())); System.out.println(cumul(donnees)); ... } c L. Tichit, 2015-2016 POO et Java 7/1 Éléments de la bibliothèque Parcours des collections Exemple. La méthode cumul additionne les éléments d’une collection de nombres : double cumul(Collection suiteDeNombres) { /* Les éléments de suiteDeNombres doivent être des objets Double */ double result = 0; Iterator iter = suiteDeNombres.iterator(); while (iter.hasNext()) result = result + ((Double) iter.next()).doubleValue(); return result; } essai de cette méthode : void test() { List donnees = new ArrayList(); for (int i = 0; i < 5; i++) donnees.add(new Double(Math.random())); System.out.println(cumul(donnees)); ... } affichage obtenu 2.18124 c L. Tichit, 2015-2016 POO et Java 7/1 Éléments de la bibliothèque Boucle for améliorée Si tableau est un tableau de Machin, la boucle for (int i = 0; i < tableau.length; i++) exploiter(tableau[i]) c L. Tichit, 2015-2016 POO et Java 8/1 Éléments de la bibliothèque Boucle for améliorée Si tableau est un tableau de Machin, la boucle for (int i = 0; i < tableau.length; i++) exploiter(tableau[i]) peut s’écrire plus simplement for (Machin e : tableau) exploiter(e) c L. Tichit, 2015-2016 POO et Java 8/1 Éléments de la bibliothèque Boucle for améliorée Si tableau est un tableau de Machin, la boucle for (int i = 0; i < tableau.length; i++) exploiter(tableau[i]) peut s’écrire plus simplement for (Machin e : tableau) exploiter(e) Si collection est une collection de Machin, la boucle for (Iterator it = collection.iterator(); it.hasNext(); ) exploiter((Machin)it.next()) c L. Tichit, 2015-2016 POO et Java 8/1 Éléments de la bibliothèque Boucle for améliorée Si tableau est un tableau de Machin, la boucle for (int i = 0; i < tableau.length; i++) exploiter(tableau[i]) peut s’écrire plus simplement for (Machin e : tableau) exploiter(e) Si collection est une collection de Machin, la boucle for (Iterator it = collection.iterator(); it.hasNext(); ) exploiter((Machin)it.next()) peut s’écrire plus simplement for (Machin e : collection) exploiter(e) c L. Tichit, 2015-2016 POO et Java 8/1 Éléments de la bibliothèque Boucle for améliorée Si tableau est un tableau de Machin, la boucle for (int i = 0; i < tableau.length; i++) exploiter(tableau[i]) peut s’écrire plus simplement for (Machin e : tableau) exploiter(e) Si collection est une collection de Machin, la boucle for (Iterator it = collection.iterator(); it.hasNext(); ) exploiter((Machin)it.next()) peut s’écrire plus simplement for (Machin e : collection) exploiter(e) Exemple : ... double[] t = new double[N]; ... double s = 0; for (double x : t) s += x; ... c L. Tichit, 2015-2016 POO et Java 8/1 Éléments de la bibliothèque Java 5 : les collections génériques souvent les collections sont homogènes : leurs éléments ont un type commun mais, définies en toute généralité, ces éléments sont déclarés Object public interface List { void add(int index, Object element); Object get(int index); ... } c L. Tichit, 2015-2016 POO et Java 9/1 Éléments de la bibliothèque Java 5 : les collections génériques souvent les collections sont homogènes : leurs éléments ont un type commun mais, définies en toute généralité, ces éléments sont déclarés Object public interface List { void add(int index, Object element); Object get(int index); ... } apparues en Java 5, les classes génériques sont un mécanisme ajouté au niveau du texte source pour indiquer au compilateur le type des éléments en question public interface List<E> { void add(int index, E element); E get(int index); ... } c L. Tichit, 2015-2016 POO et Java 9/1 Éléments de la bibliothèque Java 5 : les collections génériques souvent les collections sont homogènes : leurs éléments ont un type commun mais, définies en toute généralité, ces éléments sont déclarés Object public interface List { void add(int index, Object element); Object get(int index); ... } apparues en Java 5, les classes génériques sont un mécanisme ajouté au niveau du texte source pour indiquer au compilateur le type des éléments en question public interface List<E> { void add(int index, E element); E get(int index); ... } le code produit n’est pas modifié par l’utilisation de ce mécanisme... c L. Tichit, 2015-2016 POO et Java 9/1 Éléments de la bibliothèque Java 5 : les collections génériques souvent les collections sont homogènes : leurs éléments ont un type commun mais, définies en toute généralité, ces éléments sont déclarés Object public interface List { void add(int index, Object element); Object get(int index); ... } apparues en Java 5, les classes génériques sont un mécanisme ajouté au niveau du texte source pour indiquer au compilateur le type des éléments en question public interface List<E> { void add(int index, E element); E get(int index); ... } le code produit n’est pas modifié par l’utilisation de ce mécanisme... ...qui n’est pas obligatoire c L. Tichit, 2015-2016 POO et Java 9/1 Éléments de la bibliothèque Java 5 : les collections génériques souvent les collections sont homogènes : leurs éléments ont un type commun mais, définies en toute généralité, ces éléments sont déclarés Object public interface List { void add(int index, Object element); Object get(int index); ... } apparues en Java 5, les classes génériques sont un mécanisme ajouté au niveau du texte source pour indiquer au compilateur le type des éléments en question public interface List<E> { void add(int index, E element); E get(int index); ... } le code produit n’est pas modifié par l’utilisation de ce mécanisme... ...qui n’est pas obligatoire si on ne l’utilise à 100% pas le compilateur affiche des avertissements c L. Tichit, 2015-2016 POO et Java 9/1 Éléments de la bibliothèque Java 5 : les collections génériques L’exemple devient : static double cumul(Collection<Double> suiteDeNombres) { /* Les éléments de suiteDeNombres sont des objets Double */ double result = 0; Iterator<Double> iter = suiteDeNombres.iterator(); while (iter.hasNext()) result = result + ((Double)iter.next()).doubleValue(); result = result + iter.next().doubleValue(); return result; } c L. Tichit, 2015-2016 POO et Java 10 / 1 Éléments de la bibliothèque Java 5 : les collections génériques L’exemple devient : static double cumul(Collection<Double> suiteDeNombres) { /* Les éléments de suiteDeNombres sont des objets Double */ double result = 0; Iterator<Double> iter = suiteDeNombres.iterator(); while (iter.hasNext()) result = result + ((Double)iter.next()).doubleValue(); result = result + iter.next().doubleValue(); return result; } appel : public static void main(String[] args) { List<Double> donnees = new ArrayList<Double>(); for (int i = 0; i < 5; i++) donnees.add(new Double(Math.random())); System.out.println(cumul(donnees)); ... } c L. Tichit, 2015-2016 POO et Java 10 / 1 Éléments de la bibliothèque Java 5 : emballage et déballage automatiques Autre bonne nouvelle : depuis Java 5 l’emballage et le déballage sont automatiques (insérés par le compilateur là où c’est nécessaire) c L. Tichit, 2015-2016 POO et Java 11 / 1 Éléments de la bibliothèque Java 5 : emballage et déballage automatiques Autre bonne nouvelle : depuis Java 5 l’emballage et le déballage sont automatiques (insérés par le compilateur là où c’est nécessaire) exemple : si unObjet est d’un type objet et unInt de type int, il est permis d’écrire unObjet = unInt; c L. Tichit, 2015-2016 POO et Java 11 / 1 Éléments de la bibliothèque Java 5 : emballage et déballage automatiques Autre bonne nouvelle : depuis Java 5 l’emballage et le déballage sont automatiques (insérés par le compilateur là où c’est nécessaire) exemple : si unObjet est d’un type objet et unInt de type int, il est permis d’écrire unObjet = unInt; cela est automatiquement traduit par le compilateur par unObjet = new Integer(unInt); c L. Tichit, 2015-2016 POO et Java 11 / 1 Éléments de la bibliothèque Java 5 : emballage et déballage automatiques Autre bonne nouvelle : depuis Java 5 l’emballage et le déballage sont automatiques (insérés par le compilateur là où c’est nécessaire) exemple : si unObjet est d’un type objet et unInt de type int, il est permis d’écrire unObjet = unInt; cela est automatiquement traduit par le compilateur par unObjet = new Integer(unInt); Réciproquement, il est permis d’écrire unInt = unObjet; c L. Tichit, 2015-2016 POO et Java 11 / 1 Éléments de la bibliothèque Java 5 : emballage et déballage automatiques Autre bonne nouvelle : depuis Java 5 l’emballage et le déballage sont automatiques (insérés par le compilateur là où c’est nécessaire) exemple : si unObjet est d’un type objet et unInt de type int, il est permis d’écrire unObjet = unInt; cela est automatiquement traduit par le compilateur par unObjet = new Integer(unInt); Réciproquement, il est permis d’écrire unInt = unObjet; cela est automatiquement traduit par unInt = unObjet.intValue(); c L. Tichit, 2015-2016 POO et Java 11 / 1 Éléments de la bibliothèque Java 5 : emballage et déballage automatiques Autre bonne nouvelle : depuis Java 5 l’emballage et le déballage sont automatiques (insérés par le compilateur là où c’est nécessaire) exemple : si unObjet est d’un type objet et unInt de type int, il est permis d’écrire unObjet = unInt; cela est automatiquement traduit par le compilateur par unObjet = new Integer(unInt); Réciproquement, il est permis d’écrire unInt = unObjet; cela est automatiquement traduit par unInt = unObjet.intValue(); contrainte : il faut que unObjet soit de la classe-enveloppe correspondant au type primitif visé (ici la classe enveloppe est Integer puisque le type primitif est int) c L. Tichit, 2015-2016 POO et Java 11 / 1 Éléments de la bibliothèque Java 5 : généricité + (emb|déb)allage automatiques L’exemple devient : static double cumul(Collection<Double> suiteDeNombres) { /* Les éléments de suiteDeNombres sont des objets Double */ double result = 0; Iterator<Double> iter = suiteDeNombres.iterator(); while (iter.hasNext()) result = result + iter.next().doubleValue(); result = result + iter.next(); return result; } c L. Tichit, 2015-2016 POO et Java 12 / 1 Éléments de la bibliothèque Java 5 : généricité + (emb|déb)allage automatiques L’exemple devient : static double cumul(Collection<Double> suiteDeNombres) { /* Les éléments de suiteDeNombres sont des objets Double */ double result = 0; Iterator<Double> iter = suiteDeNombres.iterator(); while (iter.hasNext()) result = result + iter.next().doubleValue(); result = result + iter.next(); return result; } appel : public static void main(String[] args) { ArrayList<Double> donnees = new ArrayList<Double>(); for (int i = 0; i < 5; i++) donnees.add( new Double(Math.random()) ); donnees.add( Math.random() ); System.out.println(cumul(donnees)); ... } c L. Tichit, 2015-2016 POO et Java 12 / 1 Éléments de la bibliothèque Avec une boucle for améliorée Dernier avatar de notre exemple, avec collection générique, emballage-déballage automatiques et boucle for améliorée ce qui donne : static double cumul(Collection<Double> suiteDeNombres) { /* Les éléments de suiteDeNombres sont des objets Double */ double result = 0; for (Double x : suiteDeNombres) result = result + x; return result; } c L. Tichit, 2015-2016 POO et Java 13 / 1 Éléments de la bibliothèque Table associative collection de paires (clé, valeur) munie d’un c L. Tichit, 2015-2016 POO et Java accès par les clés optimisé 14 / 1 Éléments de la bibliothèque Table associative collection de paires (clé, valeur) munie d’un accès par les clés optimisé deux méthodes fondamentales : Interface Map { void put(Object cle, Object valeur); // ajout d’une paire Object get(Object cle); // recherche de la valeur associée à une clé ... c L. Tichit, 2015-2016 POO et Java 14 / 1 Éléments de la bibliothèque Table associative collection de paires (clé, valeur) munie d’un accès par les clés optimisé deux méthodes fondamentales : Interface Map { void put(Object cle, Object valeur); // ajout d’une paire Object get(Object cle); // recherche de la valeur associée à une clé ... ou, depuis Java 5 : Interface Map<K, V> { void put(K cle, V valeur); // ajout d’une paire V get(Object cle); // recherche de la valeur associée à une clé ... c L. Tichit, 2015-2016 POO et Java 14 / 1 Éléments de la bibliothèque Table associative collection de paires (clé, valeur) munie d’un accès par les clés optimisé deux méthodes fondamentales : Interface Map { void put(Object cle, Object valeur); // ajout d’une paire Object get(Object cle); // recherche de la valeur associée à une clé ... ou, depuis Java 5 : Interface Map<K, V> { void put(K cle, V valeur); // ajout d’une paire V get(Object cle); // recherche de la valeur associée à une clé ... deux implémentations principales : HashMap : implémentation par une table de hachage ; la plus efficace, mais les clés n’y sont pas ordonnées TreeMap : implémentation par un arbre binaire de recherche ; un peu moins efficace (mais en O(log n) quand-même), les clés y sont ordonnées c L. Tichit, 2015-2016 POO et Java 14 / 1 Éléments de la bibliothèque Exemple classique Écriture d’un dictionnaire pour associer des descriptions à des mots. Deux commandes : ?mot : pour obtenir la description d’un mot +mot : pour ajouter un mot et sa description (demandée ensuite) c L. Tichit, 2015-2016 POO et Java 15 / 1 Éléments de la bibliothèque Exemple classique Écriture d’un dictionnaire pour associer des descriptions à des mots. Deux commandes : ?mot : pour obtenir la description d’un mot +mot : pour ajouter un mot et sa description (demandée ensuite) Scanner entree = new Scanner(System.in); String commande, nom, description; Map<String, String> repertoire = new HashMap<String, String>(); for (;;) { System.out.print("commande: "); commande = entree.nextLine().trim(); char code = commande.charAt(0); nom = commande.substring(1).trim(); c L. Tichit, 2015-2016 POO et Java 15 / 1 Éléments de la bibliothèque Exemple classique Écriture d’un dictionnaire pour associer des descriptions à des mots. Deux commandes : ?mot : pour obtenir la description d’un mot +mot : pour ajouter un mot et sa description (demandée ensuite) Scanner entree = new Scanner(System.in); String commande, nom, description; Map<String, String> repertoire = new HashMap<String, String>(); for (;;) { System.out.print("commande: "); commande = entree.nextLine().trim(); char code = commande.charAt(0); nom = commande.substring(1).trim(); if (code == ’?’) { description = (String) repertoire.get(nom); if (description != null) System.out.println(nom + " : " + description); } c L. Tichit, 2015-2016 POO et Java 15 / 1 Éléments de la bibliothèque Exemple classique Écriture d’un dictionnaire pour associer des descriptions à des mots. Deux commandes : ?mot : pour obtenir la description d’un mot +mot : pour ajouter un mot et sa description (demandée ensuite) Scanner entree = new Scanner(System.in); String commande, nom, description; Map<String, String> repertoire = new HashMap<String, String>(); for (;;) { System.out.print("commande: "); commande = entree.nextLine().trim(); char code = commande.charAt(0); nom = commande.substring(1).trim(); if (code == ’?’) { description = (String) repertoire.get(nom); if (description != null) System.out.println(nom + " : " + description); } else if (code == ’+’) { System.out.print("description: "); description = entree.nextLine(); repertoire.put(nom, description); } } c L. Tichit, 2015-2016 POO et Java 15 / 1 Éléments de la bibliothèque Entrées-sorties Petit choix de classes usuelles du paquetage java.io : Identification d’un fichier + gestion externe des fichiers (rename, copy, delete, contenu des répertoires, etc.) File c L. Tichit, 2015-2016 POO et Java 16 / 1 Éléments de la bibliothèque Entrées-sorties Petit choix de classes usuelles du paquetage java.io : File Identification d’un fichier + gestion externe des fichiers (rename, copy, delete, contenu des répertoires, etc.) InputStream FileInputStream DataInputStream ObjectInputStream Flot d’octets en entrée... ...provenant d’un fichier ...transformés en données de types primitifs ...transformés en objets c L. Tichit, 2015-2016 POO et Java 16 / 1 Éléments de la bibliothèque Entrées-sorties Petit choix de classes usuelles du paquetage java.io : File Identification d’un fichier + gestion externe des fichiers (rename, copy, delete, contenu des répertoires, etc.) InputStream FileInputStream DataInputStream ObjectInputStream Flot d’octets en entrée... ...provenant d’un fichier ...transformés en données de types primitifs ...transformés en objets OutputStream Même chose, en sortie (même genre de sous-classes) c L. Tichit, 2015-2016 POO et Java 16 / 1 Éléments de la bibliothèque Entrées-sorties Petit choix de classes usuelles du paquetage java.io : File Identification d’un fichier + gestion externe des fichiers (rename, copy, delete, contenu des répertoires, etc.) InputStream FileInputStream DataInputStream ObjectInputStream Flot d’octets en entrée... ...provenant d’un fichier ...transformés en données de types primitifs ...transformés en objets OutputStream Même chose, en sortie (même genre de sous-classes) Reader InputStreamReader BufferedReader Flot de caractères en entrée... ...provenant d’un InputStream ...regroupés en lignes c L. Tichit, 2015-2016 POO et Java 16 / 1 Éléments de la bibliothèque Entrées-sorties Petit choix de classes usuelles du paquetage java.io : File Identification d’un fichier + gestion externe des fichiers (rename, copy, delete, contenu des répertoires, etc.) InputStream FileInputStream DataInputStream ObjectInputStream Flot d’octets en entrée... ...provenant d’un fichier ...transformés en données de types primitifs ...transformés en objets OutputStream Même chose, en sortie (même genre de sous-classes) Reader InputStreamReader BufferedReader Flot de caractères en entrée... ...provenant d’un InputStream ...regroupés en lignes Writer PrintWriter Même chose, en sortie avec mise en forme des données (ex. : System.out) c L. Tichit, 2015-2016 POO et Java 16 / 1 Éléments de la bibliothèque Les flots, c’est de la plomberie... application qui effectue des lectures de lignes readLine() lignes de caractères BufferedReader caractères InputStreamReader octets FileInputStream un fichier (la source des octets) File c L. Tichit, 2015-2016 POO et Java 17 / 1 Éléments de la bibliothèque Les flots, c’est de la plomberie... application qui effectue des lectures de lignes Ce qui, dans le code, donne : readLine() lignes de caractères BufferedReader caractères InputStreamReader File f = new File("mydata.txt"); FileInputStream fis = new FileInputStream(f); InputStreamReader isr = new InputStreamReader(fis); BufferedReader br = new BufferedReader(isr); octets FileInputStream un fichier (la source des octets) File c L. Tichit, 2015-2016 POO et Java 17 / 1 Éléments de la bibliothèque Les flots, c’est de la plomberie... application qui effectue des lectures de lignes Ce qui, dans le code, donne : readLine() lignes de caractères BufferedReader caractères InputStreamReader octets File f = new File("mydata.txt"); FileInputStream fis = new FileInputStream(f); InputStreamReader isr = new InputStreamReader(fis); BufferedReader br = new BufferedReader(isr); ou, en version compacte : FileInputStream un fichier (la source des octets) File c L. Tichit, 2015-2016 BufferedReader br = new BufferedReader( new InputStreamReader( new FileInputStream( new File("mydata.txt")))); POO et Java 17 / 1 Éléments de la bibliothèque Exemple : lire des lignes Lister un fichier par lignes numérotées : Fichier Listing.java import java.io.*; application qui effectue des lectures de lignes public class Listing { public static void main(String[] args) { int n = 0; readLine() lignes de caractères BufferedReader br caractères r File f = new File(args[0]); InputStream is = new FileInputStream(f); Reader r = new InputStreamReader(is); BufferedReader br = new BufferedReader(r); InputStreamReader octets is FileInputStream un fichier (la source des octets) File f c L. Tichit, 2015-2016 POO et Java 18 / 1 Éléments de la bibliothèque Exemple : lire des lignes Lister un fichier par lignes numérotées : Fichier Listing.java import java.io.*; application qui effectue des lectures de lignes public class Listing { public static void main(String[] args) { int n = 0; readLine() lignes de caractères BufferedReader br caractères r InputStreamReader octets is FileInputStream un fichier (la source des octets) File f = new File(args[0]); InputStream is = new FileInputStream(f); Reader r = new InputStreamReader(is); BufferedReader br = new BufferedReader(r); String ligne = br.readLine(); while (ligne != null) { System.out.printf((++n) + " " + ligne); ligne = br.readLine(); } is.close(); File f c L. Tichit, 2015-2016 POO et Java 18 / 1 Éléments de la bibliothèque Exemple : lire des lignes Lister un fichier par lignes numérotées : Fichier Listing.java import java.io.*; application qui effectue des lectures de lignes readLine() lignes de caractères BufferedReader br caractères r public class Listing { public static void main(String[] args) { int n = 0; try { File f = new File(args[0]); InputStream is = new FileInputStream(f); Reader r = new InputStreamReader(is); BufferedReader br = new BufferedReader(r); String ligne = br.readLine(); while (ligne != null) { System.out.printf((++n) + " " + ligne); ligne = br.readLine(); } InputStreamReader octets is FileInputStream is.close(); } catch (ArrayIndexOutOfBoundsException e) { System.err.println("emploi: java Listing <fichier>"); } catch (FileNotFoundException e) { System.err.println("fichier inconnu: " + args[0]); } catch (IOException e) { System.err.println("erreur après " + n + " lignes"); } un fichier (la source des octets) File f } } c L. Tichit, 2015-2016 POO et Java 18 / 1 Éléments de la bibliothèque Exemple : lire des lignes Une autre manière de désigner le fichier (au lieu de File f = new File(args[0]) ) : Fichier Listing.java public class Listing { public static void main(String[] args) { int n = 0; try { JFileChooser dial = new JFileChooser(); personnalisation de dial int res = dial.showOpenDialog(null); if (res != JFileChooser.APPROVE OPTION) return; File f = dial.getSelectedFile(); c L. Tichit, 2015-2016 POO et Java 19 / 1 Éléments de la bibliothèque Exemple : lire des lignes Une autre manière de désigner le fichier (au lieu de File f = new File(args[0]) ) : Fichier Listing.java public class Listing { public static void main(String[] args) { int n = 0; try { JFileChooser dial = new JFileChooser(); personnalisation de dial int res = dial.showOpenDialog(null); if (res != JFileChooser.APPROVE OPTION) return; File f = dial.getSelectedFile(); InputStream is = new FileInputStream(f); Reader r = new InputStreamReader(is); BufferedReader br = new BufferedReader(r); String ligne = br.readLine(); while (ligne != null) { System.out.println((++n) + " " + ligne); ligne = br.readLine(); } is.close(); } catch (ArrayIndexOutOfBoundsException e) { System.err.println("emploi: java Listing <fichier>"); } catch (FileNotFoundException e) { /* cette exception ne sera pas lancée */ System.err.println("fichier inconnu"); } catch (IOException e) { System.err.println("erreur après " + n + " lignes"); } } } c L. Tichit, 2015-2016 POO et Java 19 / 1 Éléments de la bibliothèque Exemple : lire des unites lexicales Exemple : lecture d’un fichier de texte formé de couples nom , nombre comme ... poids 1800.0 vitesse 145 largeur 1.40 longueur 3.25 ... écrivons une méthode Map lireInfos(File fichier); qui lit ces couples et en fait une table associative clé poids vitesse largeur longueur ... c L. Tichit, 2015-2016 valeur 1800.0 145 1.40 3.25 ... POO et Java 20 / 1 Éléments de la bibliothèque Exemple : lire des unites lexicales Exemple : lecture de couples nom, valeur et rangement dans une table associative : Extrait de code ... Map lireInfos(File fichier) throws IOException { HashMap result = new HashMap(); c L. Tichit, 2015-2016 POO et Java 21 / 1 Éléments de la bibliothèque Exemple : lire des unites lexicales Exemple : lecture de couples nom, valeur et rangement dans une table associative : Extrait de code ... Map lireInfos(File fichier) throws IOException { HashMap result = new HashMap(); InputStream is = new FileInputStream(fichier); Reader r = new InputStreamReader(is); StreamTokenizer tokenizer = new StreamTokenizer(r); /* personnalisation éventuelle de tokenizer (quels sont les caractères blancs , etc.) */ c L. Tichit, 2015-2016 POO et Java 21 / 1 Éléments de la bibliothèque Exemple : lire des unites lexicales Exemple : lecture de couples nom, valeur et rangement dans une table associative : Extrait de code ... Map lireInfos(File fichier) throws IOException { HashMap result = new HashMap(); InputStream is = new FileInputStream(fichier); Reader r = new InputStreamReader(is); StreamTokenizer tokenizer = new StreamTokenizer(r); /* personnalisation éventuelle de tokenizer (quels sont les caractères blancs , etc.) */ for (;;) { int unite = tokenizer.nextToken(); if (unite == StreamTokenizer.TT EOF) break; c L. Tichit, 2015-2016 POO et Java 21 / 1 Éléments de la bibliothèque Exemple : lire des unites lexicales Exemple : lecture de couples nom, valeur et rangement dans une table associative : Extrait de code ... Map lireInfos(File fichier) throws IOException { HashMap result = new HashMap(); InputStream is = new FileInputStream(fichier); Reader r = new InputStreamReader(is); StreamTokenizer tokenizer = new StreamTokenizer(r); /* personnalisation éventuelle de tokenizer (quels sont les caractères blancs , etc.) */ for (;;) { int unite = tokenizer.nextToken(); if (unite == StreamTokenizer.TT EOF) break; if (unite != StreamTokenizer.TT WORD) throw new IOException("mot attendu"); String cle = tokenizer.sval; c L. Tichit, 2015-2016 POO et Java 21 / 1 Éléments de la bibliothèque Exemple : lire des unites lexicales Exemple : lecture de couples nom, valeur et rangement dans une table associative : Extrait de code ... Map lireInfos(File fichier) throws IOException { HashMap result = new HashMap(); InputStream is = new FileInputStream(fichier); Reader r = new InputStreamReader(is); StreamTokenizer tokenizer = new StreamTokenizer(r); /* personnalisation éventuelle de tokenizer (quels sont les caractères blancs , etc.) */ for (;;) { int unite = tokenizer.nextToken(); if (unite == StreamTokenizer.TT EOF) break; if (unite != StreamTokenizer.TT WORD) throw new IOException("mot attendu"); String cle = tokenizer.sval; unite = tokenizer.nextToken(); if (unite != StreamTokenizer.TT NUMBER) throw new IOException("nombre attendu"); double valeur = tokenizer.nval; c L. Tichit, 2015-2016 POO et Java 21 / 1 Éléments de la bibliothèque Exemple : lire des unites lexicales Exemple : lecture de couples nom, valeur et rangement dans une table associative : Extrait de code ... Map lireInfos(File fichier) throws IOException { HashMap result = new HashMap(); InputStream is = new FileInputStream(fichier); Reader r = new InputStreamReader(is); StreamTokenizer tokenizer = new StreamTokenizer(r); /* personnalisation éventuelle de tokenizer (quels sont les caractères blancs , etc.) */ for (;;) { int unite = tokenizer.nextToken(); if (unite == StreamTokenizer.TT EOF) break; if (unite != StreamTokenizer.TT WORD) throw new IOException("mot attendu"); String cle = tokenizer.sval; unite = tokenizer.nextToken(); if (unite != StreamTokenizer.TT NUMBER) throw new IOException("nombre attendu"); double valeur = tokenizer.nval; result.put(cle, new Double(valeur)); } return result; } ... c L. Tichit, 2015-2016 POO et Java 21 / 1 Éléments de la bibliothèque Autre exemple : mise en forme de données Afficher un listing avec des colonnes bien alignées Fichier Article.java public class Article { int ref; String denom; double prix; public Article(int r, String d, double p) { ref = r; denom = d; prix = p; } } c L. Tichit, 2015-2016 POO et Java 22 / 1 Éléments de la bibliothèque Autre exemple : mise en forme de données Afficher un listing avec des colonnes bien alignées Fichier Article.java public class Article { int ref; String denom; double prix; public Article(int r, String d, double p) { ref = r; denom = d; prix = p; } } Fichier TestFormat.java public class TestFormat { public static void main(String[] args) { Article[] maListe = { new Article(75, "Savon à barbe", 2.40), new Article(24085, "Gillette 6 lames x 5", 18), new Article(125, "Javel 1L", 0.85), }; imprimer(maListe); } static void imprimer(Article[] liste) { c’est ici qu’il faut réfléchir... } } c L. Tichit, 2015-2016 POO et Java 22 / 1 Éléments de la bibliothèque Exemple : mise en forme de données Première version Fichier TestFormat.java import java.text.*; public class TestFormat { ... static void imprimer(Article[] liste) { NumberFormat fd = new DecimalFormat("#,##0.00"); for (int i = 0; i < liste.length; i++) System.out.println(liste[i].ref + " | " + liste[i].denom + " | " + fd.format(liste[i].prix)); } ... } c L. Tichit, 2015-2016 POO et Java 23 / 1 Éléments de la bibliothèque Exemple : mise en forme de données Première version Fichier TestFormat.java import java.text.*; public class TestFormat { ... static void imprimer(Article[] liste) { NumberFormat fd = new DecimalFormat("#,##0.00"); for (int i = 0; i < liste.length; i++) System.out.println(liste[i].ref + " | " + liste[i].denom + " | " + fd.format(liste[i].prix)); } ... } Résultat obtenu (pas terrible !) : 75 | Savon à barbe | 2,40 24085 | Gillette 6 lames x 5 | 18,00 125 | Javel 1L | 0,85 c L. Tichit, 2015-2016 POO et Java 23 / 1 Éléments de la bibliothèque Exemple : mise en forme de données Meilleure version (Java 5) Fichier TestFormat.java public class TestFormat { ... static void imprimer(Article[] liste) { for (int i = 0; i < liste.length; i++) System.out.printf("%8d | %-30s | %8.2f%n", liste[i].ref, liste[i].denom, liste[i].prix); } ... } c L. Tichit, 2015-2016 POO et Java 24 / 1 Éléments de la bibliothèque Exemple : mise en forme de données Meilleure version (Java 5) Fichier TestFormat.java public class TestFormat { ... static void imprimer(Article[] liste) { for (int i = 0; i < liste.length; i++) System.out.printf("%8d | %-30s | %8.2f%n", liste[i].ref, liste[i].denom, liste[i].prix); } ... } Résultat obtenu : 75 | Savon à barbe 24085 | Gillette 6 lames x 5 125 | Javel 1L c L. Tichit, 2015-2016 | | | 2,40 18,00 0,85 POO et Java 24 / 1 Éléments de la bibliothèque Expressions régulières expressions régulières en Java : paquetage java.util.regex c L. Tichit, 2015-2016 POO et Java 25 / 1 Éléments de la bibliothèque Expressions régulières expressions régulières en Java : paquetage java.util.regex deux classes : Pattern : représentation compilée d’une expression régulière Matcher : variables et méthodes pour faire travailler une expression régulière sur un texte donné c L. Tichit, 2015-2016 POO et Java 25 / 1 Éléments de la bibliothèque Expressions régulières expressions régulières en Java : paquetage java.util.regex deux classes : Pattern : représentation compilée d’une expression régulière Matcher : variables et méthodes pour faire travailler une expression régulière sur un texte donné exemple : extraire les liens d’une page html, représentés par des balises : <a href="http://www.luminy.univ-mrs.fr" ... > c L. Tichit, 2015-2016 POO et Java 25 / 1 Éléments de la bibliothèque Expressions régulières expressions régulières en Java : paquetage java.util.regex deux classes : Pattern : représentation compilée d’une expression régulière Matcher : variables et méthodes pour faire travailler une expression régulière sur un texte donné exemple : extraire les liens d’une page html, représentés par des balises : <a href="http://www.luminy.univ-mrs.fr" ... > l’expression régulière correspondante est : <a[ \t\n]+href="[^"]+" plusieurs caractères autres que " ... un ou plusieurs blancs c L. Tichit, 2015-2016 ... encadrés par " POO et Java 25 / 1 Éléments de la bibliothèque Expressions régulières expressions régulières en Java : paquetage java.util.regex deux classes : Pattern : représentation compilée d’une expression régulière Matcher : variables et méthodes pour faire travailler une expression régulière sur un texte donné exemple : extraire les liens d’une page html, représentés par des balises : <a href="http://www.luminy.univ-mrs.fr" ... > l’expression régulière correspondante est : <a[ \t\n]+href="[^"]+" plusieurs caractères autres que " ... un ou plusieurs blancs ... encadrés par " soit, sous forme de chaı̂ne de caractères Java : "<a[ \\t\\n]+href=\"[^\"]+\"" c L. Tichit, 2015-2016 POO et Java 25 / 1 Éléments de la bibliothèque Expressions régulières, exemple Version de base : Fichier TestExpressionsRegulieres.java public class TestExpressionsRegulieres { public static void main(String[] args) { String texte = null; /* Obtention du texte à analyser */ try { File fic = new File(args[0]); char[] tmp = new char[(int) fic.length()]; Reader lecteur = new FileReader(fic); lecteur.read(tmp); lecteur.close(); texte = new String(tmp); } catch (IOException e) { e.printStackTrace(); return; } c L. Tichit, 2015-2016 POO et Java 26 / 1 Éléments de la bibliothèque Expressions régulières, exemple Version de base : Fichier TestExpressionsRegulieres.java public class TestExpressionsRegulieres { /* L’expression régulière */ String expReg = "<a[ \\t\\n]+href=\"[^\"]+\""; Pattern motif = Pattern.compile(expReg); public static void main(String[] args) { String texte = null; /* Obtention du texte à analyser */ try { File fic = new File(args[0]); char[] tmp = new char[(int) fic.length()]; Reader lecteur = new FileReader(fic); lecteur.read(tmp); lecteur.close(); texte = new String(tmp); } catch (IOException e) { e.printStackTrace(); return; } c L. Tichit, 2015-2016 POO et Java 26 / 1 Éléments de la bibliothèque Expressions régulières, exemple Version de base : Fichier TestExpressionsRegulieres.java public class TestExpressionsRegulieres { /* L’expression régulière */ String expReg = "<a[ \\t\\n]+href=\"[^\"]+\""; Pattern motif = Pattern.compile(expReg); public static void main(String[] args) { String texte = null; /* Obtention du texte à analyser */ try { File fic = new File(args[0]); char[] tmp = new char[(int) fic.length()]; Reader lecteur = new FileReader(fic); lecteur.read(tmp); lecteur.close(); texte = new String(tmp); } catch (IOException e) { e.printStackTrace(); return; } c L. Tichit, 2015-2016 /* Analyse */ Matcher recon = motif.matcher(texte); int position = 0; while (recon.find(position)) { String s = texte.substring( recon.start(), recon.end()); System.out.println(s); position = recon.end(); } } } POO et Java 26 / 1 Éléments de la bibliothèque Expressions régulières, exemple Version de base : Fichier TestExpressionsRegulieres.java public class TestExpressionsRegulieres { /* L’expression régulière */ String expReg = "<a[ \\t\\n]+href=\"[^\"]+\""; Pattern motif = Pattern.compile(expReg); public static void main(String[] args) { String texte = null; /* Obtention du texte à analyser */ try { File fic = new File(args[0]); char[] tmp = new char[(int) fic.length()]; Reader lecteur = new FileReader(fic); lecteur.read(tmp); lecteur.close(); texte = new String(tmp); } catch (IOException e) { e.printStackTrace(); return; } /* Analyse */ Matcher recon = motif.matcher(texte); int position = 0; while (recon.find(position)) { String s = texte.substring( recon.start(), recon.end()); System.out.println(s); position = recon.end(); } } } Affichage obtenu <a href="http://www.pagesjaunes.fr/pb.cgi?" <a href="http://annuaire.univ-mrs.fr/" <a href="http://localhost:805/" <a href="http://www.lemonde.fr/" etc. c L. Tichit, 2015-2016 POO et Java 26 / 1 Éléments de la bibliothèque Expressions régulières, exemple Amélioration : Fichier TestExpressionsRegulieres.java public class TestExpressionsRegulieres { /* L’expression régulière */ String expReg = "<a[ \\t\\n]+href=\"([^\"]+)\""; Pattern motif = Pattern.compile(expReg); public static void main(String[] args) { String texte = null; /* Obtention du texte à analyser */ try { File fic = new File(args[0]); char[] tmp = new char[(int) fic.length()]; Reader lecteur = new FileReader(fic); lecteur.read(tmp); lecteur.close(); texte = new String(tmp); } catch (IOException e) { e.printStackTrace(); return; } c L. Tichit, 2015-2016 /* Analyse */ Matcher recon = motif.matcher(texte); int position = 0; while (recon.find(position)) { String s = texte.substring( recon.start(1), recon.end(1)); System.out.println(s); position = recon.end(); } } } POO et Java 27 / 1 Éléments de la bibliothèque Expressions régulières, exemple Amélioration : Fichier TestExpressionsRegulieres.java public class TestExpressionsRegulieres { /* L’expression régulière */ String expReg = "<a[ \\t\\n]+href=\"([^\"]+)\""; Pattern motif = Pattern.compile(expReg); public static void main(String[] args) { String texte = null; /* Obtention du texte à analyser */ try { File fic = new File(args[0]); char[] tmp = new char[(int) fic.length()]; Reader lecteur = new FileReader(fic); lecteur.read(tmp); lecteur.close(); texte = new String(tmp); } catch (IOException e) { e.printStackTrace(); return; } /* Analyse */ Matcher recon = motif.matcher(texte); int position = 0; while (recon.find(position)) { String s = texte.substring( recon.start(1), recon.end(1)); System.out.println(s); position = recon.end(); } } } Affichage obtenu http://www.pagesjaunes.fr/pb.cgi? http://annuaire.univ-mrs.fr/ http://localhost:805/ http://www.lemonde.fr/ etc. c L. Tichit, 2015-2016 POO et Java 27 / 1