Vous êtes sur la page 1sur 12

CHAPITRE 4 :

LES TABLEAUX ET LES CHAÎNES DE CARACTÈRES

1. Les tableaux
1.1 Quelques compléments sur les tableaux (voir chapitre 2)
Un tableau est considéré comme un objet. Les tableaux sont toujours
manipulés par référence. La déclaration d'un tableau ne fait qu'associer son
identificateur à une variable de nature référence initialisée à null.
La taille d'un tableau est indiquée lors de sa création par la primitive new. Un
tableau peut être construit sur la base d'un type primitif ou d'un type construit
(classe ou tableau).
Les éléments d'un tableau sont initialisés par des valeurs nulles. On peut
connaître la taille d'un tableau par l'attribut length (exemple : t.length où t
désigne un tableau). Un tableau qui n'est plus référencé est éliminé par le
ramasse miettes.

1.2. Argument et résultat d'une méthode


Un tableau peut être passé comme argument à une méthode. Il s'agit plutôt du
passage de sa référence. Pour passer une variable de type primitif par
1
référence à une méthode, on la déclare comme un tableau d'un seul élément.
Une méthode peut retourner un tableau. On restitue alors une référence sur le
tableau résultat.

1.3. Les opérateurs appliqués sur les tableaux


On peut appliquer les opérateurs : =, ==, et !=. La manipulation concerne plutôt
les références des tableaux.

1.4. Les tableaux à plusieurs dimensions


JAVA permet de gérer des tableaux à plusieurs dimensions. Un tableau à plusieurs
dimensions est géré comme un tableau de tableaux (de tableaux …).

Exemple
int [][] t=new int[5][];
for(int i=0; i<t.length;i++)
t[i]=new int[5 - i];
for(int i=0; i<t.length;i++)
for(int j=0; j<t[i].length;j++)
t[i][j] = i+j;
2
[0] [1] [2] [3] [4]
t[0] 0 1 2 3 4
t[1] 1 2 3 4
t[2] 2 3 4
t[3] 3 4
t[4] 4

1.5. Les tableaux d'objets

Un tableau déclaré à partir d'une classe, contient des références à des objets de la
classe en question. Chaque élément du tableau représente une référence à un objet.

3
Exemple
public class TestVoiture
{
public static void main(String [] args)
{ Voiture v;
Voiture t[] = new Voiture[2];
// déclaration d'un tableau de deux éléments
t[0] = new Voiture(6513,"vert"); // nouvel objet
t[0].changerCouleur("blanc");
boolean b= t[0] instanceof Voiture;
t[1] =t[0]; // deux références pour un même objet
v=t[1]; // on dispose finalement d'un seul objet
}
}
1.6. La classe Vector
La classe Vector décrit un conteneur d'objets (voir aussi la classe Hashtable et
l'interface Enumeration). Une instance de la classe Vector implémente un tableau
d'objets auxquels on accède par un indice entier. La taille de ce tableau est variable.

4
Les objets (càd les références d'objets) à mettre dans l'instance de Vector peuvent
être de types différents. Un conteneur ne peut pas contenir des éléments de types
primitifs, sauf si on utilise les "Wrapper". Plusieurs services (méthodes) sont
offerts dans la classe Vector. Parmi lesquels :

 void addElement(Object obj) : ajoute obj à la fin


 void insertElementAt(Object obj, int i) : insère obj à la position i
 void removeElementAt(int i) : supprime l'élément de la position i
 void removeAllElements() : supprime tous les éléments
 Object elementAt(int i) : retourne une référence sur l'élément de la position
i sans l'éliminer
 void setElementAt(Object obj, int i) : place l'objet obj dans la position i
 boolean contains(Object obj) : teste si obj existe
 int indexOf(Object obj) : retourne la position de obj (-1 s'il n'existe pas)
 int size() : retourne la taille du tableau

5
Exemple
import java.util.*; // package qui contient la classe Vector
public class TestVector
{
public static void main(String [] args)
{
Vector vec = new Vector() ;
for (int i=0 ; i<10 ; i++)
{
Integer element = new Integer(i) ;
vec.addElement(element) ; // Ajout en fin de Vecteur
} // => 0 1 2 3 4 5 6 7 8 9
String i = "JAVA";
vec.insertElementAt(i,5) ; // Insertion à la position indiquée
// => 0 1 2 3 4 JAVA 5 6 7 8 9
String j = (String)vec.elementAt(5) ;
System.out.println(" élément de la position 5 :"+j);
vec.removeElementAt(0) ;
//Suppression de l'élément indiqué => 1 2 3 4 JAVA 5 6 7 8 9
6
Integer k = (Integer)vec.elementAt(5) ;
System.out.println(" élément de la position 5 :"+k);
// k contient une référence sur l'objet Integer contenant 5
vec.removeAllElements() ;
// Suppression de tous les éléments
} //fin main()
}//fin classe

2. Les chaînes de caractères

2.1. Les tableaux de char


Une chaîne de caractères peut être contenue dans un tableau de char. Chaque
caractère est placé dans une case du tableau sans utiliser de caractères spéciaux
comme le '\0'. Cependant, cette solution n'offre pas la possibilité d'utiliser des
services de manipulation standard de chaînes. Elle est, donc, rarement utilisée.

7
Exemple
class TableauChar
{public static void main(String[] arg)
{ char[] tableau;
tableau = new char[4];
tableau[0] = 'J';
tableau[1] = 'A';
tableau[2] = 'V';
tableau[3] = 'A';
System.out.println(tableau); //affiche : JAVA
}
}
2.2. La classe String

JAVA offre dans sa librairie (API) une classe appropriée aux chaînes de
caractères nommée String, très riche en fonctionnalités. La classe String offre
des objets constants de chaînes. Cela signifie que le contenu de l'objet String
ne peut pas être modifié. Cependant, la même référence de l'objet peut être
utilisée pour désigner d'autres objets String.
8
La classe String est très utilisée dans les applications JAVA, pour des raisons
de facilité, on peut s'en passer de l'utilisation de l'opérateur new pour instancier
un objet String. Les opérateurs + et += sont utilisés pour réaliser la
concaténation des chaînes.

Exemple
class TestString
{
public static void main(String [] args)
{ String ch1,ch2;
ch1="Programmation";
ch2=ch1;
System.out.println("ch1: " +ch1);//Programmation
System.out.println("ch2: " +ch2);//Programmation
ch1+=" en JAVA"; //Création d'un nouvel objet
System.out.println("ch1: " +ch1);//Programmation en JAVA
System.out.println("ch2: " +ch2);//Programmation
Ch1=Clavier.lireString();//encore un nouvel objet
}}
9
Parmi les fonctionnalités offertes par la classe String :
 char charAt(int i) : retourne le caractère dans la position i (la première
position est d'indice 0)
 int compareTo(String anotherString) : retourne 0 si les deux chaînes comparées
sont égales, une valeur inférieure à 0 si la chaîne comparée est inférieure à la
chaîne en argument et une valeur supérieure à 0 si la chaîne comparée est
supérieure à la chaîne en argument
 boolean equals(Object anotherObject) : retourne true si anotherObject est un
String qui contient la même séquence de caractères
 boolean equalsIgnoreCase(String anotherString) : même rôle que equals mais
sans tenir compte de la différence entre majuscule et minuscule
 int indexOf(int ch) : retourne l'indice de la première occurrence de ch (considéré
comme un caractère) dans la chaîne (ou –1)
 int indexOf(String str) : retourne l'indice du premier caractère de la première
occurrence de str dans la chaîne (ou –1)
 String concat(String str) : retourne un nouvel objet String contenant la chaîne en
argument concaténée à la fin de la chaîne traitée. Si la longueur de str est nulle,
on garde l'objet de départ comme résultat
 int length() : retourne la longueur de la chaîne
10
2.3. La classe StringBuffer
La classe StringBuffer offre des objets chaînes modifiables, càd des chaînes
dont on peut changer des morceaux, dont on peut changer la taille, …
Contrairement à la classe String, il n'est pas possible d'utiliser l'opérateur + (et
+=) avec les objets de cette classe. Lorsqu'un objet du type StringBuffer est
construit, un tableau de caractères est alloué dans l'objet. Sa taille initiale est de
16, mais si l'on ajoute plus de 16 caractères dans l'objet, un nouveau tableau,
plus grand est alloué (les caractères sont recopiés de l'ancien tableau vers le
nouveau et l'ancien tableau est détruit).

Parmi les fonctionnalités offertes par la classe StringBuffer :


 int length() : retourne la longueur de la chaîne.
 int capacity() : retourne la taille du tableau associé.
 StringBuffer append(char c) : ajoute le caractère c à la fin de la chaîne.
 StringBuffer append(String str) : ajoute le contenu de l'objet str à la fin de la
chaîne.
 StringBuffer append(char str[]) : ajoute le contenu du tableau str à la fin de la
chaîne.
11
 StringBuffer insert(int i, char c) : insère le caractère c à la position i de la
chaîne.
 StringBuffer insert(int i, String str) : insère le contenu de l'objet str à la position
i de la chaîne.
StringBuffer reverse() : inverse la chaîne.

12

Vous aimerez peut-être aussi