Vous êtes sur la page 1sur 98

La programmation orientee objets

et le langage Java

Master BBSG 2
Laurent Tichit
Departement Informatique et Interactions, Faculte des Sciences de Luminy

Cours 5: Quelques elements de la


biblioth`eque standard

L.
c Tichit, 2015-2016 POO et Java 1/1
ements de la biblioth`
El eque

Types enumeres

Le besoin : manipuler des ensembles finis de donn


ees conventionnelles :
{ lundi, mardi, ... dimanche }, { nord, sud, est, ouest }, etc.

L.
c Tichit, 2015-2016 POO et Java 2/1
ements de la biblioth`
El eque

Types enumeres

Le besoin : manipuler des ensembles finis de donn


ees conventionnelles :
{ lundi, mardi, ... dimanche }, { nord, sud, est, ouest }, etc.
Ces donn
ees
sont tr`
es symboliques

L.
c Tichit, 2015-2016 POO et Java 2/1
ements de la biblioth`
El eque

Types enumeres

Le besoin : manipuler des ensembles finis de donn


ees conventionnelles :
{ lundi, mardi, ... dimanche }, { nord, sud, est, ouest }, etc.
Ces donn
ees
sont tr`
es symboliques
sont atomiques (simples, comme des entiers)

L.
c Tichit, 2015-2016 POO et Java 2/1
ements de la biblioth`
El eque

Types enumeres

Le besoin : manipuler des ensembles finis de donn


ees conventionnelles :
{ lundi, mardi, ... dimanche }, { nord, sud, est, ouest }, etc.
Ces donn
ees
sont tr`
es symboliques
sont atomiques (simples, comme des entiers)
forment des ensembles finis

L.
c Tichit, 2015-2016 POO et Java 2/1
ements de la biblioth`
El eque

Types enumeres

Le besoin : manipuler des ensembles finis de donn


ees conventionnelles :
{ lundi, mardi, ... dimanche }, { nord, sud, est, ouest }, etc.
Ces donn
ees
sont tr`
es symboliques
sont atomiques (simples, comme des entiers)
forment des ensembles finis
forment des ensembles disjoints

L.
c Tichit, 2015-2016 POO et Java 2/1
ements de la biblioth`
El eque

Types enumeres

Le besoin : manipuler des ensembles finis de donn


ees conventionnelles :
{ lundi, mardi, ... dimanche }, { nord, sud, est, ouest }, etc.
Ces donn
ees
sont tr`
es symboliques
sont atomiques (simples, comme des entiers)
forment des ensembles finis
forment des ensembles disjoints

Jusqu`
a Java 1.4
public class JourSemaine {
public static final int LUNDI = 0;
public static final int MARDI = 1;
public static final int MERCREDI = 2;
public static final int JEUDI = 3;
public static final int VENDREDI = 4;
public static final int SAMEDI = 5;
public static final int DIMANCHE = 6;
}

L.
c Tichit, 2015-2016 POO et Java 2/1
ements de la biblioth`
El eque

Types enumeres

Le besoin : manipuler des ensembles finis de donn


ees conventionnelles :
{ lundi, mardi, ... dimanche }, { nord, sud, est, ouest }, etc.
Ces donn
ees
sont tr`
es symboliques
sont atomiques (simples, comme des entiers)
forment des ensembles finis
forment des ensembles disjoints

Jusqu`
a Java 1.4
public class JourSemaine { A partir de Java 5
public static final int LUNDI = 0;
public static final int MARDI = 1; public enum JourSemaine {
public static final int MERCREDI = 2; LUNDI, MARDI, MERCREDI, JEUDI,
public static final int JEUDI = 3; VENDREDI, SAMEDI, DIMANCHE
public static final int VENDREDI = 4; }
public static final int SAMEDI = 5;
public static final int DIMANCHE = 6;
}

L.
c Tichit, 2015-2016 POO et Java 2/1
ements de la biblioth`
El eque

Types enumeres

Jusqu`
a Java 1.4
public class JourSemaine { A partir de Java 5
public static final int LUNDI = 0;
public static final int MARDI = 1; public enum JourSemaine {
public static final int MERCREDI = 2; LUNDI, MARDI, MERCREDI, JEUDI,
public static final int JEUDI = 3; VENDREDI, SAMEDI, DIMANCHE
public static final int VENDREDI = 4; }
public static final int SAMEDI = 5;
public static final int DIMANCHE = 6;
}

Emploi. Dans le premier cas :


int jour;
...
jour = JourSemaine.MERCREDI;

L.
c Tichit, 2015-2016 POO et Java 3/1
ements de la biblioth`
El eque

Types enumeres

Jusqu`
a Java 1.4
public class JourSemaine { A partir de Java 5
public static final int LUNDI = 0;
public static final int MARDI = 1; public enum JourSemaine {
public static final int MERCREDI = 2; LUNDI, MARDI, MERCREDI, JEUDI,
public static final int JEUDI = 3; VENDREDI, SAMEDI, DIMANCHE
public static final int VENDREDI = 4; }
public static final int SAMEDI = 5;
public static final int DIMANCHE = 6;
}

Emploi. Dans le premier cas :


int jour;
...
jour = JourSemaine.MERCREDI;

Dans le second :
JourSemaine jour;
...
jour = JourSemaine.MERCREDI;

L.
c Tichit, 2015-2016 POO et Java 3/1
ements de la biblioth`
El eque

Methodes des types enumeres

String toString() exemple : JourSemaine.LUNDI.toString() "LUNDI"

L.
c Tichit, 2015-2016 POO et Java 4/1
ements de la biblioth`
El eque

Methodes des types enumeres

String toString() exemple : JourSemaine.LUNDI.toString() "LUNDI"


static JourSemaine valueOf(String nom) r
eciproque de la pr
ec
edente :
JourSemaine.valueOf("MARDI") JourSemaine.MARDI

L.
c Tichit, 2015-2016 POO et Java 4/1
ements de la biblioth`
El eque

Methodes des types enumeres

String toString() exemple : JourSemaine.LUNDI.toString() "LUNDI"


static JourSemaine valueOf(String nom) r
eciproque de la pr
ec
edente :
JourSemaine.valueOf("MARDI") JourSemaine.MARDI
int ordinal() rang (dans lordre de la d
eclaration) :
JourSemaine.MERCREDI.ordinal() 2

L.
c Tichit, 2015-2016 POO et Java 4/1
ements de la biblioth`
El eque

Methodes des types enumeres

String toString() exemple : JourSemaine.LUNDI.toString() "LUNDI"


static JourSemaine valueOf(String nom) r
eciproque de la pr
ec
edente :
JourSemaine.valueOf("MARDI") JourSemaine.MARDI
int ordinal() rang (dans lordre de la d
eclaration) :
JourSemaine.MERCREDI.ordinal() 2
static JourSemaine[] values() tableau contenant toutes les valeurs du type :
JourSemaine.LUNDI ... JourSemaine.DIMANCHE

L.
c Tichit, 2015-2016 POO et Java 4/1
ements de la biblioth`
El eque

Methodes des types enumeres

String toString() exemple : JourSemaine.LUNDI.toString() "LUNDI"


static JourSemaine valueOf(String nom) r
eciproque de la pr
ec
edente :
JourSemaine.valueOf("MARDI") JourSemaine.MARDI
int ordinal() rang (dans lordre de la d
eclaration) :
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


e:
public enum JourSemaine {
LUNDI, MARDI, MERCREDI, JEUDI, VENDREDI, SAMEDI, DIMANCHE;

public JourSemaine lendemain() {


return values()[(ordinal() + 1) % values().length];
}
}

L.
c Tichit, 2015-2016 POO et Java 4/1
ements de la biblioth`
El eque

Collections et dictionnaires

interfaces classes
Collection collection la plus g
en
erale
void add(Object element)
int size()
boolean contains(Object valeur)

L.
c Tichit, 2015-2016 POO et Java 5/1
ements de la biblioth`
El eque

Collections et dictionnaires

interfaces classes
Collection collection la plus g
en
erale
void add(Object element)
int size()
boolean contains(Object valeur)
List une collection quon peut voir comme une s
equence
void add(int index, Object element)
Object get(int index)

L.
c Tichit, 2015-2016 POO et Java 5/1
ements de la biblioth`
El eque

Collections et dictionnaires

interfaces classes
Collection collection la plus g
enerale
void add(Object element)
int size()
boolean contains(Object valeur)
List une collection quon peut voir comme une s equence
void add(int index, Object element)
Object get(int index)
ArrayList tableau (acc`es indexe optimis
e) qui grandit automatiquement

L.
c Tichit, 2015-2016 POO et Java 5/1
ements de la biblioth`
El eque

Collections et dictionnaires

interfaces classes
Collection collection la plus g
enerale
void add(Object element)
int size()
boolean contains(Object valeur)
List une collection quon peut voir comme une s equence
void add(int index, Object element)
Object get(int index)
ArrayList tableau (acc`es indexe optimis
e) qui grandit automatiquement
Vector Idem. De plus, les Vector sont  synchronis es 

L.
c Tichit, 2015-2016 POO et Java 5/1
ements de la biblioth`
El eque

Collections et dictionnaires

interfaces classes
Collection collection la plus gen
erale
void add(Object element)
int size()
boolean contains(Object valeur)
List une collection quon peut voir comme une s equence
void add(int index, Object element)
Object get(int index)
ArrayList tableau (acc` es index
e optimise) qui grandit automatiquement
Vector Idem. De plus, les Vector sont  synchronis es 
LinkedList liste chan
ee (optimise les insertions et suppressions internes)

L.
c Tichit, 2015-2016 POO et Java 5/1
ements de la biblioth`
El eque

Collections et dictionnaires

interfaces classes
Collection collection la plus gen
erale
void add(Object element)
int size()
boolean contains(Object valeur)
List une collection quon peut voir comme une s equence
void add(int index, Object element)
Object get(int index)
ArrayList tableau (acc` es index
e optimise) qui grandit automatiquement
Vector Idem. De plus, les Vector sont  synchronis es 
LinkedList liste chan
ee (optimise les insertions et suppressions internes)

Set collection sans r


ep
etition (optimise le test dappartenance)

L.
c Tichit, 2015-2016 POO et Java 5/1
ements de la biblioth`
El eque

Collections et dictionnaires

interfaces classes
Collection collection la plus gen
erale
void add(Object element)
int size()
boolean contains(Object valeur)
List une collection quon peut voir comme une s equence
void add(int index, Object element)
Object get(int index)
ArrayList tableau (acc` es index
e optimise) qui grandit automatiquement
Vector Idem. De plus, les Vector sont  synchronis es 
LinkedList liste chan
ee (optimise les insertions et suppressions internes)

Set collection sans r


ep
etition (optimise le test dappartenance)
HashSet efficacit
e maximale
TreeSet les
el
ements doivent etre ordonn
es ; le parcours respecte cet ordre

L.
c Tichit, 2015-2016 POO et Java 5/1
ements de la biblioth`
El eque

Collections et dictionnaires

interfaces classes
Collection collection la plus gen
erale
void add(Object element)
int size()
boolean contains(Object valeur)
List une collection quon peut voir comme une s equence
void add(int index, Object element)
Object get(int index)
ArrayList tableau (acc` es index
e optimise) qui grandit automatiquement
Vector Idem. De plus, les Vector sont  synchronis es 
LinkedList liste chan
ee (optimise les insertions et suppressions internes)

Set collection sans r


ep
etition (optimise le test dappartenance)
HashSet efficacit
e maximale
TreeSet les
el
ements doivent etre ordonn
es ; le parcours respecte cet ordre

Map table associative, faite de couples (cl


e, valeur)

L.
c Tichit, 2015-2016 POO et Java 5/1
ements de la biblioth`
El eque

Collections et dictionnaires

interfaces classes
Collection collection la plus gen
erale
void add(Object element)
int size()
boolean contains(Object valeur)
List une collection quon peut voir comme une s equence
void add(int index, Object element)
Object get(int index)
ArrayList tableau (acc` es index
e optimise) qui grandit automatiquement
Vector Idem. De plus, les Vector sont  synchronis es 
LinkedList liste chan
ee (optimise les insertions et suppressions internes)

Set collection sans r


ep
etition (optimise le test dappartenance)
HashSet efficacit
e maximale
TreeSet les
el
ements doivent etre ordonn
es ; le parcours respecte cet ordre

Map table associative, faite de couples (cle, valeur)


HashMap efficacit
e maximale
TreeMap les cl
es doivent
etre ordonnees ; le parcours refl`
ete lordre

L.
c Tichit, 2015-2016 POO et Java 5/1
ements de la biblioth`
El eque

Parcours des collections

Pour parcourir une collection on utilise un it


erateur :

public interface Iterator {


boolean hasNext();
renvoie true si lit
eration nest pas finie,
`
a la mani`ere de  i < tab.length 
Object next();
renvoie le prochain el
ement et fait avancer lit
eration,
`
a la mani`ere de  tab[i++] 
void remove();
supprime lel
ement en cours (peu utile, souvent inop erant)
}

L.
c Tichit, 2015-2016 POO et Java 6/1
ements de la biblioth`
El eque

Parcours des collections

Pour parcourir une collection on utilise un it


erateur :

public interface Iterator {


boolean hasNext();
renvoie true si lit
eration nest pas finie,
`
a la mani`ere de  i < tab.length 
Object next();
renvoie le prochain el
ement et fait avancer lit
eration,
`
a la mani`ere de  tab[i++] 
void remove();
supprime lel
ement en cours (peu utile, souvent inop erant)
}

les it
erateurs sont cr
e
es et initialis
es par les collections elles-m
emes :

Iterator iter = uneCollection.iterator();


cr
eation dune it
eration sur les
el
ements de uneCollection

L.
c Tichit, 2015-2016 POO et Java 6/1
ements de la biblioth`
El eque

Parcours des collections

Exemple. La m
ethode cumul additionne les
el
ements dune collection de nombres :
double cumul(Collection suiteDeNombres) {
/* Les
el
ements de suiteDeNombres doivent
etre des objets Double */

L.
c Tichit, 2015-2016 POO et Java 7/1
ements de la biblioth`
El eque

Parcours des collections

Exemple. La m
ethode cumul additionne les
el
ements dune collection de nombres :
double cumul(Collection suiteDeNombres) {
/* Les
el
ements de suiteDeNombres doivent
etre des objets Double */
double result = 0;
Iterator iter = suiteDeNombres.iterator();
while (iter.hasNext())
result = result + iter.next() ;
return result;
}

L.
c Tichit, 2015-2016 POO et Java 7/1
ements de la biblioth`
El eque

Parcours des collections

Exemple. La m
ethode cumul additionne les
el
ements dune collection de nombres :
double cumul(Collection suiteDeNombres) {
/* Les
el
ements de suiteDeNombres doivent
etre des objets Double */
double result = 0;
Iterator iter = suiteDeNombres.iterator();
while (iter.hasNext())
result = result + (Double) iter.next() ;
return result;
}

L.
c Tichit, 2015-2016 POO et Java 7/1
ements de la biblioth`
El eque

Parcours des collections

Exemple. La m
ethode cumul additionne les
el
ements dune collection de nombres :
double cumul(Collection suiteDeNombres) {
/* Les
el
ements de suiteDeNombres doivent
etre des objets Double */
double result = 0;
Iterator iter = suiteDeNombres.iterator();
while (iter.hasNext())
result = result + ((Double) iter.next()).doubleValue();
return result;
}

L.
c Tichit, 2015-2016 POO et Java 7/1
ements de la biblioth`
El eque

Parcours des collections

Exemple. La m
ethode cumul additionne les
el
ements dune collection de nombres :
double cumul(Collection suiteDeNombres) {
/* Les
el
ements de suiteDeNombres doivent
etre 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
ethode :
void test() {
List donnees = new ArrayList();
for (int i = 0; i < 5; i++)
donnees.add(new Double(Math.random()));
System.out.println(cumul(donnees));
...
}

L.
c Tichit, 2015-2016 POO et Java 7/1
ements de la biblioth`
El eque

Parcours des collections

Exemple. La m
ethode cumul additionne les
el
ements dune collection de nombres :
double cumul(Collection suiteDeNombres) {
/* Les
el
ements de suiteDeNombres doivent
etre 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
ethode :
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

L.
c Tichit, 2015-2016 POO et Java 7/1
ements de la biblioth`
El eque

Boucle for  amelioree 

Si tableau est un tableau de Machin, la boucle


for (int i = 0; i < tableau.length; i++)
exploiter(tableau[i])

L.
c Tichit, 2015-2016 POO et Java 8/1
ements de la biblioth`
El eque

Boucle for  amelioree 

Si tableau est un tableau de Machin, la boucle


for (int i = 0; i < tableau.length; i++)
exploiter(tableau[i])
peut s
ecrire plus simplement
for (Machin e : tableau)
exploiter(e)

L.
c Tichit, 2015-2016 POO et Java 8/1
ements de la biblioth`
El eque

Boucle for  amelioree 

Si tableau est un tableau de Machin, la boucle


for (int i = 0; i < tableau.length; i++)
exploiter(tableau[i])
peut s
ecrire 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())

L.
c Tichit, 2015-2016 POO et Java 8/1
ements de la biblioth`
El eque

Boucle for  amelioree 

Si tableau est un tableau de Machin, la boucle


for (int i = 0; i < tableau.length; i++)
exploiter(tableau[i])
peut s
ecrire 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
ecrire plus simplement
for (Machin e : collection)
exploiter(e)

L.
c Tichit, 2015-2016 POO et Java 8/1
ements de la biblioth`
El eque

Boucle for  amelioree 

Si tableau est un tableau de Machin, la boucle


for (int i = 0; i < tableau.length; i++)
exploiter(tableau[i])
peut s
ecrire 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
ecrire plus simplement
for (Machin e : collection)
exploiter(e)

Exemple :
...
double[] t = new double[N];
...
double s = 0;
for (double x : t)
s += x;
...

L.
c Tichit, 2015-2016 POO et Java 8/1
ements de la biblioth`
El eque

Java 5 : les collections generiques

souvent les collections sont homog`


enes : leurs
el
ements ont un type commun
mais, d
efinies en toute g
en
eralit
e, ces
el
ements sont d
eclar
es Object
public interface List {
void add(int index, Object element);
Object get(int index);
...
}

L.
c Tichit, 2015-2016 POO et Java 9/1
ements de la biblioth`
El eque

Java 5 : les collections generiques

souvent les collections sont homog`


enes : leurs
el
ements ont un type commun
mais, d
efinies en toute g
en
eralit
e, ces
el
ements sont d
eclar
es Object
public interface List {
void add(int index, Object element);
Object get(int index);
...
}

apparues en Java 5, les classes g


en
eriques sont un mecanisme ajoute au niveau du texte
source pour indiquer au compilateur le type des el
ements en question
public interface List<E> {
void add(int index, E element);
E get(int index);
...
}

L.
c Tichit, 2015-2016 POO et Java 9/1
ements de la biblioth`
El eque

Java 5 : les collections generiques

souvent les collections sont homog`


enes : leurs
el
ements ont un type commun
mais, d
efinies en toute g
en
eralit
e, ces
el
ements sont d
eclar
es Object
public interface List {
void add(int index, Object element);
Object get(int index);
...
}

apparues en Java 5, les classes g


en
eriques sont un mecanisme ajoute au niveau du texte
source pour indiquer au compilateur le type des el
ements en question
public interface List<E> {
void add(int index, E element);
E get(int index);
...
}

le code produit nest pas modifi


e par lutilisation de ce m
ecanisme...

L.
c Tichit, 2015-2016 POO et Java 9/1
ements de la biblioth`
El eque

Java 5 : les collections generiques

souvent les collections sont homog`


enes : leurs
el
ements ont un type commun
mais, d
efinies en toute g
en
eralit
e, ces
el
ements sont d
eclar
es Object
public interface List {
void add(int index, Object element);
Object get(int index);
...
}

apparues en Java 5, les classes g


en
eriques sont un mecanisme ajoute au niveau du texte
source pour indiquer au compilateur le type des el
ements en question
public interface List<E> {
void add(int index, E element);
E get(int index);
...
}

le code produit nest pas modifi


e par lutilisation de ce m
ecanisme...
...qui nest pas obligatoire

L.
c Tichit, 2015-2016 POO et Java 9/1
ements de la biblioth`
El eque

Java 5 : les collections generiques

souvent les collections sont homog`


enes : leurs
el
ements ont un type commun
mais, d
efinies en toute g
en
eralit
e, ces
el
ements sont d
eclar
es Object
public interface List {
void add(int index, Object element);
Object get(int index);
...
}

apparues en Java 5, les classes g


en
eriques sont un mecanisme ajoute au niveau du texte
source pour indiquer au compilateur le type des el
ements en question
public interface List<E> {
void add(int index, E element);
E get(int index);
...
}

le code produit nest pas modifi


e par lutilisation de ce m
ecanisme...
...qui nest pas obligatoire
si on ne lutilise `
a 100% pas le compilateur affiche des avertissements

L.
c Tichit, 2015-2016 POO et Java 9/1
ements de la biblioth`
El eque

Java 5 : les collections generiques

Lexemple devient :
static double cumul(Collection<Double> suiteDeNombres) {
/* Les
el
ements 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;
}

L.
c Tichit, 2015-2016 POO et Java 10 / 1
ements de la biblioth`
El eque

Java 5 : les collections generiques

Lexemple devient :
static double cumul(Collection<Double> suiteDeNombres) {
/* Les
el
ements 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));
...
}

L.
c Tichit, 2015-2016 POO et Java 10 / 1
ements de la biblioth`
El eque

Java 5 : emballage et deballage automatiques

Autre bonne nouvelle : depuis Java 5 lemballage et le d


eballage sont automatiques (ins
er
es
par le compilateur l`
a o`
u cest n
ecessaire)

L.
c Tichit, 2015-2016 POO et Java 11 / 1
ements de la biblioth`
El eque

Java 5 : emballage et deballage automatiques

Autre bonne nouvelle : depuis Java 5 lemballage et le d


eballage sont automatiques (ins
er
es
par le compilateur l`
a o`
u cest n
ecessaire)
exemple : si unObjet est dun type objet et unInt de type int, il est permis d
ecrire
unObjet = unInt;

L.
c Tichit, 2015-2016 POO et Java 11 / 1
ements de la biblioth`
El eque

Java 5 : emballage et deballage automatiques

Autre bonne nouvelle : depuis Java 5 lemballage et le d


eballage sont automatiques (ins
er
es
par le compilateur l`
a o`
u cest n
ecessaire)
exemple : si unObjet est dun type objet et unInt de type int, il est permis d
ecrire
unObjet = unInt;
cela est automatiquement traduit par le compilateur par
unObjet = new Integer(unInt);

L.
c Tichit, 2015-2016 POO et Java 11 / 1
ements de la biblioth`
El eque

Java 5 : emballage et deballage automatiques

Autre bonne nouvelle : depuis Java 5 lemballage et le d


eballage sont automatiques (ins
er
es
par le compilateur l`
a o`
u cest n
ecessaire)
exemple : si unObjet est dun type objet et unInt de type int, il est permis d
ecrire
unObjet = unInt;
cela est automatiquement traduit par le compilateur par
unObjet = new Integer(unInt);
R
eciproquement, il est permis d
ecrire
unInt = unObjet;

L.
c Tichit, 2015-2016 POO et Java 11 / 1
ements de la biblioth`
El eque

Java 5 : emballage et deballage automatiques

Autre bonne nouvelle : depuis Java 5 lemballage et le d


eballage sont automatiques (ins
er
es
par le compilateur l`
a o`
u cest n
ecessaire)
exemple : si unObjet est dun type objet et unInt de type int, il est permis d
ecrire
unObjet = unInt;
cela est automatiquement traduit par le compilateur par
unObjet = new Integer(unInt);
R
eciproquement, il est permis d
ecrire
unInt = unObjet;
cela est automatiquement traduit par
unInt = unObjet.intValue();

L.
c Tichit, 2015-2016 POO et Java 11 / 1
ements de la biblioth`
El eque

Java 5 : emballage et deballage automatiques

Autre bonne nouvelle : depuis Java 5 lemballage et le d


eballage sont automatiques (ins
er
es
par le compilateur l`
a o`
u cest n
ecessaire)
exemple : si unObjet est dun type objet et unInt de type int, il est permis d
ecrire
unObjet = unInt;
cela est automatiquement traduit par le compilateur par
unObjet = new Integer(unInt);
R
eciproquement, il est permis d
ecrire
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
e (ici la classe enveloppe est Integer puisque le type primitif est int)

L.
c Tichit, 2015-2016 POO et Java 11 / 1
ements de la biblioth`
El eque

Java 5 : genericite + (emb|deb)allage automatiques

Lexemple devient :
static double cumul(Collection<Double> suiteDeNombres) {
/* Les
el
ements 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;
}

L.
c Tichit, 2015-2016 POO et Java 12 / 1
ements de la biblioth`
El eque

Java 5 : genericite + (emb|deb)allage automatiques

Lexemple devient :
static double cumul(Collection<Double> suiteDeNombres) {
/* Les
el
ements 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));
...
}

L.
c Tichit, 2015-2016 POO et Java 12 / 1
ements de la biblioth`
El eque

Avec une boucle for amelioree

Dernier avatar de notre exemple, avec


collection g
en
erique,
emballage-d
eballage automatiques et
boucle for am
elior
ee

ce qui donne :

static double cumul(Collection<Double> suiteDeNombres) {


/* Les
el
ements de suiteDeNombres sont des objets Double */
double result = 0;
for (Double x : suiteDeNombres)
result = result + x;
return result;
}

L.
c Tichit, 2015-2016 POO et Java 13 / 1
ements de la biblioth`
El eque

Table associative

collection de paires (cl


e, valeur) munie dun  acc`
es par les cl
es  optimis
e

L.
c Tichit, 2015-2016 POO et Java 14 / 1
ements de la biblioth`
El eque

Table associative

collection de paires (cl


e, valeur) munie dun  acc`
es par les cl
es  optimis
e
deux m
ethodes fondamentales :
Interface Map {
void put(Object cle, Object valeur); // ajout dune paire
Object get(Object cle); // recherche de la valeur associ
ee `
a une cl
e
...

L.
c Tichit, 2015-2016 POO et Java 14 / 1
ements de la biblioth`
El eque

Table associative

collection de paires (cl


e, valeur) munie dun  acc`
es par les cl
es  optimis
e
deux m
ethodes fondamentales :
Interface Map {
void put(Object cle, Object valeur); // ajout dune paire
Object get(Object cle); // recherche de la valeur associ
ee `
a une cl
e
...
ou, depuis Java 5 :
Interface Map<K, V> {
void put(K cle, V valeur); // ajout dune paire
V get(Object cle); // recherche de la valeur associ
ee `
a une cl
e
...

L.
c Tichit, 2015-2016 POO et Java 14 / 1
ements de la biblioth`
El eque

Table associative

collection de paires (cl


e, valeur) munie dun  acc`
es par les cl
es  optimis
e
deux m
ethodes fondamentales :
Interface Map {
void put(Object cle, Object valeur); // ajout dune paire
Object get(Object cle); // recherche de la valeur associ
ee `
a une cl
e
...
ou, depuis Java 5 :
Interface Map<K, V> {
void put(K cle, V valeur); // ajout dune paire
V get(Object cle); // recherche de la valeur associ
ee `
a une cl
e
...
deux impl
ementations principales :
HashMap : implementation par une  table de hachage  ; la plus efficace, mais les
cl
es ny sont pas ordonn
ees
TreeMap : implementation par un arbre binaire de recherche ; un peu moins efficace
(mais en O(log n) quand-m eme), les cl
es y sont ordonn
ees

L.
c Tichit, 2015-2016 POO et Java 14 / 1
ements de la biblioth`
El eque

Exemple classique

Ecriture dun dictionnaire pour associer des descriptions `


a des mots.
Deux commandes :
 ?mot  : pour obtenir la description dun mot
 +mot  : pour ajouter un mot et sa description (demand
ee ensuite)

L.
c Tichit, 2015-2016 POO et Java 15 / 1
ements de la biblioth`
El eque

Exemple classique

Ecriture dun dictionnaire pour associer des descriptions `


a des mots.
Deux commandes :
 ?mot  : pour obtenir la description dun mot
 +mot  : pour ajouter un mot et sa description (demand
ee 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();

L.
c Tichit, 2015-2016 POO et Java 15 / 1
ements de la biblioth`
El eque

Exemple classique

Ecriture dun dictionnaire pour associer des descriptions `


a des mots.
Deux commandes :
 ?mot  : pour obtenir la description dun mot
 +mot  : pour ajouter un mot et sa description (demand
ee 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);
}

L.
c Tichit, 2015-2016 POO et Java 15 / 1
ements de la biblioth`
El eque

Exemple classique

Ecriture dun dictionnaire pour associer des descriptions `


a des mots.
Deux commandes :
 ?mot  : pour obtenir la description dun mot
 +mot  : pour ajouter un mot et sa description (demand
ee 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);
}
}

L.
c Tichit, 2015-2016 POO et Java 15 / 1
ements de la biblioth`
El eque

Entrees-sorties

Petit choix de classes usuelles du paquetage java.io :

File Identification dun fichier + gestion  externe  des fichiers


(rename, copy, delete, contenu des r epertoires, etc.)

L.
c Tichit, 2015-2016 POO et Java 16 / 1
ements de la biblioth`
El eque

Entrees-sorties

Petit choix de classes usuelles du paquetage java.io :

File Identification dun fichier + gestion  externe  des fichiers


(rename, copy, delete, contenu des r epertoires, etc.)

InputStream Flot doctets en entr


ee...
FileInputStream ...provenant dun fichier
DataInputStream ...transform
es en donnees de types primitifs
ObjectInputStream ...transform
es en objets

L.
c Tichit, 2015-2016 POO et Java 16 / 1
ements de la biblioth`
El eque

Entrees-sorties

Petit choix de classes usuelles du paquetage java.io :

File Identification dun fichier + gestion  externe  des fichiers


(rename, copy, delete, contenu des r epertoires, etc.)

InputStream Flot doctets en entr


ee...
FileInputStream ...provenant dun fichier
DataInputStream ...transform
es en donnees de types primitifs
ObjectInputStream ...transform
es en objets

OutputStream M
eme chose, en sortie (m
eme genre de sous-classes)

L.
c Tichit, 2015-2016 POO et Java 16 / 1
ements de la biblioth`
El eque

Entrees-sorties

Petit choix de classes usuelles du paquetage java.io :

File Identification dun fichier + gestion  externe  des fichiers


(rename, copy, delete, contenu des r epertoires, etc.)

InputStream Flot doctets en entr


ee...
FileInputStream ...provenant dun fichier
DataInputStream ...transform
es en donnees de types primitifs
ObjectInputStream ...transform
es en objets

OutputStream M
eme chose, en sortie (m
eme genre de sous-classes)

Reader Flot de caract`


eres en entr
ee...
InputStreamReader ...provenant dun InputStream
BufferedReader ...regroup
es en lignes

L.
c Tichit, 2015-2016 POO et Java 16 / 1
ements de la biblioth`
El eque

Entrees-sorties

Petit choix de classes usuelles du paquetage java.io :

File Identification dun fichier + gestion  externe  des fichiers


(rename, copy, delete, contenu des r epertoires, etc.)

InputStream Flot doctets en entr


ee...
FileInputStream ...provenant dun fichier
DataInputStream ...transform
es en donnees de types primitifs
ObjectInputStream ...transform
es en objets

OutputStream M
eme chose, en sortie (m
eme genre de sous-classes)

Reader Flot de caract`


eres en entr
ee...
InputStreamReader ...provenant dun InputStream
BufferedReader ...regroup
es en lignes

Writer Meme chose, en sortie


PrintWriter avec mise en forme des donn
ees (ex. : System.out)

L.
c Tichit, 2015-2016 POO et Java 16 / 1
ements de la biblioth`
El eque

Les flots, cest de la plomberie...

application qui effectue


des lectures de lignes
readLine()
lignes de caractres

BufferedReader

caractres

InputStreamReader

octets

FileInputStream

un fichier (la source des octets)

File

L.
c Tichit, 2015-2016 POO et Java 17 / 1
ements de la biblioth`
El eque

Les flots, cest de la plomberie...

application qui effectue


des lectures de lignes Ce qui, dans le code, donne :
readLine()
lignes de caractres
File f = new File("mydata.txt");
FileInputStream fis =
BufferedReader new FileInputStream(f);
InputStreamReader isr =
caractres new InputStreamReader(fis);
BufferedReader br =
InputStreamReader new BufferedReader(isr);
octets

FileInputStream

un fichier (la source des octets)

File

L.
c Tichit, 2015-2016 POO et Java 17 / 1
ements de la biblioth`
El eque

Les flots, cest de la plomberie...

application qui effectue


des lectures de lignes Ce qui, dans le code, donne :
readLine()
lignes de caractres
File f = new File("mydata.txt");
FileInputStream fis =
BufferedReader new FileInputStream(f);
InputStreamReader isr =
caractres new InputStreamReader(fis);
BufferedReader br =
InputStreamReader new BufferedReader(isr);
octets ou, en version compacte :
FileInputStream BufferedReader br =
new BufferedReader(
un fichier (la source des octets) new InputStreamReader(
new FileInputStream(
File new File("mydata.txt"))));

L.
c Tichit, 2015-2016 POO et Java 17 / 1
ements de la biblioth`
El eque

Exemple : lire des lignes

Lister un fichier par lignes num


erot
ees :

Fichier Listing.java

import java.io.*;
application qui effectue public class Listing {
des lectures de lignes public static void main(String[] args) {
readLine() int n = 0;
lignes de caractres
File f = new File(args[0]);
BufferedReader InputStream is = new FileInputStream(f);
br
Reader r = new InputStreamReader(is);
caractres BufferedReader br = new BufferedReader(r);

r InputStreamReader

octets

is FileInputStream

un fichier (la source des octets)

File
f

L.
c Tichit, 2015-2016 POO et Java 18 / 1
ements de la biblioth`
El eque

Exemple : lire des lignes

Lister un fichier par lignes num


erot
ees :

Fichier Listing.java

import java.io.*;
application qui effectue public class Listing {
des lectures de lignes public static void main(String[] args) {
readLine() int n = 0;
lignes de caractres
File f = new File(args[0]);
BufferedReader InputStream is = new FileInputStream(f);
br
Reader r = new InputStreamReader(is);
caractres BufferedReader br = new BufferedReader(r);

r InputStreamReader String ligne = br.readLine();


while (ligne != null) {
System.out.printf((++n) + " " + ligne);
octets
ligne = br.readLine();
}
is FileInputStream
is.close();
un fichier (la source des octets)

File
f

L.
c Tichit, 2015-2016 POO et Java 18 / 1
ements de la biblioth`
El eque

Exemple : lire des lignes

Lister un fichier par lignes num


erot
ees :

Fichier Listing.java

import java.io.*;
application qui effectue public class Listing {
des lectures de lignes public static void main(String[] args) {
readLine() int n = 0;
lignes de caractres try {
File f = new File(args[0]);
BufferedReader InputStream is = new FileInputStream(f);
br
Reader r = new InputStreamReader(is);
caractres BufferedReader br = new BufferedReader(r);

r InputStreamReader String ligne = br.readLine();


while (ligne != null) {
System.out.printf((++n) + " " + ligne);
octets
ligne = br.readLine();
}
is FileInputStream
is.close();
un fichier (la source des octets)
} catch (ArrayIndexOutOfBoundsException e) {
System.err.println("emploi: java Listing <fichier>");
} catch (FileNotFoundException e) {
File
f System.err.println("fichier inconnu: " + args[0]);
} catch (IOException e) {
System.err.println("erreur apr`
es " + n + " lignes");
}
}
}

L.
c Tichit, 2015-2016 POO et Java 18 / 1
ements de la biblioth`
El eque

Exemple : lire des lignes


Une autre mani` esigner le fichier (au lieu de  File f = new File(args[0]) ) :
ere de d

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();

L.
c Tichit, 2015-2016 POO et Java 19 / 1
ements de la biblioth`
El eque

Exemple : lire des lignes


Une autre mani` esigner le fichier (au lieu de  File f = new File(args[0]) ) :
ere de d

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
ee */
System.err.println("fichier inconnu");
} catch (IOException e) {
System.err.println("erreur apr`es " + n + " lignes");
}
}
}

L.
c Tichit, 2015-2016 POO et Java 19 / 1
ements de la biblioth`
El eque

Exemple : lire des unites lexicales

Exemple : lecture dun fichier de texte form


e de couples  nom , nombre  comme
... poids 1800.0 vitesse 145 largeur 1.40 longueur 3.25 ...


ecrivons une m
ethode
Map lireInfos(File fichier);

qui lit ces couples et en fait une table associative

cl valeur
poids 1800.0
vitesse 145
largeur 1.40
longueur 3.25
... ...

L.
c Tichit, 2015-2016 POO et Java 20 / 1
ements de la biblioth`
El eque

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();

L.
c Tichit, 2015-2016 POO et Java 21 / 1
ements de la biblioth`
El eque

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 eres  blancs , etc.) */
eventuelle de tokenizer (quels sont les caract`

L.
c Tichit, 2015-2016 POO et Java 21 / 1
ements de la biblioth`
El eque

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 eres  blancs , etc.) */
eventuelle de tokenizer (quels sont les caract`
for (;;) {
int unite = tokenizer.nextToken();
if (unite == StreamTokenizer.TT EOF)
break;

L.
c Tichit, 2015-2016 POO et Java 21 / 1
ements de la biblioth`
El eque

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 eres  blancs , etc.) */
eventuelle de tokenizer (quels sont les caract`
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;

L.
c Tichit, 2015-2016 POO et Java 21 / 1
ements de la biblioth`
El eque

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 eres  blancs , etc.) */
eventuelle de tokenizer (quels sont les caract`
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;

L.
c Tichit, 2015-2016 POO et Java 21 / 1
ements de la biblioth`
El eque

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 eres  blancs , etc.) */
eventuelle de tokenizer (quels sont les caract`
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;
}
...

L.
c Tichit, 2015-2016 POO et Java 21 / 1
ements de la biblioth`
El eque

Autre exemple : mise en forme de donnees

Afficher un listing avec des colonnes bien align


ees

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;
}
}

L.
c Tichit, 2015-2016 POO et Java 22 / 1
ements de la biblioth`
El eque

Autre exemple : mise en forme de donnees

Afficher un listing avec des colonnes bien align


ees

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 `
a 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) {


cest ici quil faut r
efl
echir...
}
}

L.
c Tichit, 2015-2016 POO et Java 22 / 1
ements de la biblioth`
El eque

Exemple : mise en forme de donnees

Premi`
ere 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));
}
...
}

L.
c Tichit, 2015-2016 POO et Java 23 / 1
ements de la biblioth`
El eque

Exemple : mise en forme de donnees

Premi`
ere 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
esultat obtenu (pas terrible !) :

75 | Savon `
a barbe | 2,40
24085 | Gillette 6 lames x 5 | 18,00
125 | Javel 1L | 0,85

L.
c Tichit, 2015-2016 POO et Java 23 / 1
ements de la biblioth`
El eque

Exemple : mise en forme de donnees

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);
}
...
}

L.
c Tichit, 2015-2016 POO et Java 24 / 1
ements de la biblioth`
El eque

Exemple : mise en forme de donnees

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
esultat obtenu :

75 | Savon `
a barbe | 2,40
24085 | Gillette 6 lames x 5 | 18,00
125 | Javel 1L | 0,85

L.
c Tichit, 2015-2016 POO et Java 24 / 1
ements de la biblioth`
El eque

Expressions reguli`eres

expressions reguli`eres en Java : paquetage java.util.regex

L.
c Tichit, 2015-2016 POO et Java 25 / 1
ements de la biblioth`
El eque

Expressions reguli`eres

expressions reguli`eres en Java : paquetage java.util.regex


deux classes :
Pattern : representation  compilee  dune expression reguli`ere
Matcher : variables et methodes pour  faire travailler  une expression
reguli`ere sur un texte donne

L.
c Tichit, 2015-2016 POO et Java 25 / 1
ements de la biblioth`
El eque

Expressions reguli`eres

expressions reguli`eres en Java : paquetage java.util.regex


deux classes :
Pattern : representation  compilee  dune expression reguli`ere
Matcher : variables et methodes pour  faire travailler  une expression
reguli`ere sur un texte donne
exemple : extraire les liens dune page html, representes par des balises :
<a href="http://www.luminy.univ-mrs.fr" ... >

L.
c Tichit, 2015-2016 POO et Java 25 / 1
ements de la biblioth`
El eque

Expressions reguli`eres

expressions reguli`eres en Java : paquetage java.util.regex


deux classes :
Pattern : representation  compilee  dune expression reguli`ere
Matcher : variables et methodes pour  faire travailler  une expression
reguli`ere sur un texte donne
exemple : extraire les liens dune page html, representes par des balises :
<a href="http://www.luminy.univ-mrs.fr" ... >
lexpression reguli`ere correspondante est :
<a[ \t\n]+href="[^"]+"
plusieurs caractres autres que " ...
un ou plusieurs
blancs ... encadrs par "

L.
c Tichit, 2015-2016 POO et Java 25 / 1
ements de la biblioth`
El eque

Expressions reguli`eres

expressions reguli`eres en Java : paquetage java.util.regex


deux classes :
Pattern : representation  compilee  dune expression reguli`ere
Matcher : variables et methodes pour  faire travailler  une expression
reguli`ere sur un texte donne
exemple : extraire les liens dune page html, representes par des balises :
<a href="http://www.luminy.univ-mrs.fr" ... >
lexpression reguli`ere correspondante est :
<a[ \t\n]+href="[^"]+"
plusieurs caractres autres que " ...
un ou plusieurs
blancs ... encadrs par "

soit, sous forme de chane de caract`eres Java :


"<a[ \\t\\n]+href=\"[^\"]+\""

L.
c Tichit, 2015-2016 POO et Java 25 / 1
ements de la biblioth`
El eque

Expressions reguli`eres, exemple

Version de base :

Fichier TestExpressionsRegulieres.java

public class TestExpressionsRegulieres {

public static void main(String[] args) {


String texte = null;

/* Obtention du texte `
a 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;
}

L.
c Tichit, 2015-2016 POO et Java 26 / 1
ements de la biblioth`
El eque

Expressions reguli`eres, exemple

Version de base :

Fichier TestExpressionsRegulieres.java

public class TestExpressionsRegulieres { /* Lexpression r


eguli`
ere */
String expReg =
public static void main(String[] args) { "<a[ \\t\\n]+href=\"[^\"]+\"";
String texte = null; Pattern motif =
Pattern.compile(expReg);
/* Obtention du texte `
a 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;
}

L.
c Tichit, 2015-2016 POO et Java 26 / 1
ements de la biblioth`
El eque

Expressions reguli`eres, exemple

Version de base :

Fichier TestExpressionsRegulieres.java

public class TestExpressionsRegulieres { /* Lexpression r


eguli`
ere */
String expReg =
public static void main(String[] args) { "<a[ \\t\\n]+href=\"[^\"]+\"";
String texte = null; Pattern motif =
Pattern.compile(expReg);
/* Obtention du texte `
a analyser */
try { /* Analyse */
File fic = new File(args[0]); Matcher recon = motif.matcher(texte);
char[] tmp =
new char[(int) fic.length()]; int position = 0;
Reader lecteur = while (recon.find(position)) {
new FileReader(fic); String s = texte.substring(
lecteur.read(tmp); recon.start(), recon.end());
lecteur.close(); System.out.println(s);
texte = new String(tmp); position = recon.end();
} catch (IOException e) { }
e.printStackTrace(); }
return; }
}

L.
c Tichit, 2015-2016 POO et Java 26 / 1
ements de la biblioth`
El eque

Expressions reguli`eres, exemple

Version de base :

Fichier TestExpressionsRegulieres.java

public class TestExpressionsRegulieres { /* Lexpression r


eguli`
ere */
String expReg =
public static void main(String[] args) { "<a[ \\t\\n]+href=\"[^\"]+\"";
String texte = null; Pattern motif =
Pattern.compile(expReg);
/* Obtention du texte `
a analyser */
try { /* Analyse */
File fic = new File(args[0]); Matcher recon = motif.matcher(texte);
char[] tmp =
new char[(int) fic.length()]; int position = 0;
Reader lecteur = while (recon.find(position)) {
new FileReader(fic); String s = texte.substring(
lecteur.read(tmp); recon.start(), recon.end());
lecteur.close(); System.out.println(s);
texte = new String(tmp); position = recon.end();
} catch (IOException e) { }
e.printStackTrace(); }
return; }
}

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.

L.
c Tichit, 2015-2016 POO et Java 26 / 1
ements de la biblioth`
El eque

Expressions reguli`eres, exemple

Am
elioration :

Fichier TestExpressionsRegulieres.java

public class TestExpressionsRegulieres { /* Lexpression r


eguli`
ere */
String expReg =
public static void main(String[] args) { "<a[ \\t\\n]+href=\"([^\"]+)\"";
String texte = null; Pattern motif =
Pattern.compile(expReg);
/* Obtention du texte `
a analyser */
try { /* Analyse */
File fic = new File(args[0]); Matcher recon = motif.matcher(texte);
char[] tmp =
new char[(int) fic.length()]; int position = 0;
Reader lecteur = while (recon.find(position)) {
new FileReader(fic); String s = texte.substring(
lecteur.read(tmp); recon.start(1), recon.end(1));
lecteur.close(); System.out.println(s);
texte = new String(tmp); position = recon.end();
} catch (IOException e) { }
e.printStackTrace(); }
return; }
}

L.
c Tichit, 2015-2016 POO et Java 27 / 1
ements de la biblioth`
El eque

Expressions reguli`eres, exemple

Am
elioration :

Fichier TestExpressionsRegulieres.java

public class TestExpressionsRegulieres { /* Lexpression r


eguli`
ere */
String expReg =
public static void main(String[] args) { "<a[ \\t\\n]+href=\"([^\"]+)\"";
String texte = null; Pattern motif =
Pattern.compile(expReg);
/* Obtention du texte `
a analyser */
try { /* Analyse */
File fic = new File(args[0]); Matcher recon = motif.matcher(texte);
char[] tmp =
new char[(int) fic.length()]; int position = 0;
Reader lecteur = while (recon.find(position)) {
new FileReader(fic); String s = texte.substring(
lecteur.read(tmp); recon.start(1), recon.end(1));
lecteur.close(); System.out.println(s);
texte = new String(tmp); position = recon.end();
} catch (IOException e) { }
e.printStackTrace(); }
return; }
}

Affichage obtenu

http://www.pagesjaunes.fr/pb.cgi?
http://annuaire.univ-mrs.fr/
http://localhost:805/
http://www.lemonde.fr/
etc.

L.
c Tichit, 2015-2016 POO et Java 27 / 1