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