next up previous contents index
Next: 12 Conversions et promotions Up: Java: Le langage Previous: 10 Exceptions

Subsections

11 Tableaux et chaînes de caractères

   

11.1 Tableaux

Les tableaux sont des suites d'objets de même type. Le nombre d'éléments de cette est fixe et est appelé taille du tableau. Les éléments des tableaux sont soit de type numérique soit des références. Les tableaux sont des objets; un objet de type tableau se définit donc en définissant une variable de type référence.
 
int [ ] tab1;
int tab1[ ];
Ces variables sont des références; l'espace mémoire nécessaire pour coder la suite des objets des tableaux se réserve avec le mot clé new et l'opérateur [].
 
tab1 = new int [ 200 ] ;
Contrairement au langage C , il n'est pas nécessaire que la taille du tableau soit textuellement une constante. Comme il s'agit d'une allocation dynamique, la taille peut être une expression dont la valeur est un entier positif ou nulle.
 
tab2 = new int [ 2 * nbre + 3];

11.1.1 Type des éléments

Les éléments d'un tableau peuvent être de n'importe quel type : type primitif ou référence. En particulier, on peut très bien définir un tableau de références vers une classe abstraite. De même, les éléments d'un tableau peuvent être des objets qui implante une interface.

 
Forme [] tab1 = new Forme[10];
Runnable [] tab2 = new Runnable[10];
Dans le premier cas, on initialisera le tableau avec des références vers objets d'une classe dérivée de la classe Forme. Quant aux deuxième cas, n'importe quel objet d'une classe implantant l'interface Runnable peut être affecté aux éléments du tableau.

11.1.2 Accès aux éléments

      On accède aux éliment d'un tableau avec l'opérateur [ ]. On notera tab[0], tab[1], ..., tab[n-1] les n premiers éléments du tableau tab.

Les éléments d'un tableau peuvent être indicés par un int, short, byte, ou char. Par contre, l'indice ne peut être un long; si c'est le cas, une erreur de compilation est engendrée.

Lors de l'accès aux éléments d'un tableau, Java fait la vérification de débordement. Lorsque l'indice du tableau est en dehors des limites des bornes du tableau, l'erreur IndexOutOfBoundsException est lancée.

11.1.3 Taille des tableaux

Par contre, comme il n'existe pas d'arithmétique sur les pointeurs, à chaque tableau est associée sa taille qui est un champ public final (length) de la classe des tableaux. On connaît donc la taille du tableau en examinant ce champ.
 
for (int i =0; i < tab1.length ; i++)  tab1[ i ] = i ;
Il n'est évidemment pas possible de modifier arbitrairement la valeur de ce champ : c'est un champ final qui s'initialise à la création du tableau.

11.1.4 Initialisation

Lors de la création d'un tableau, ses éléments sont initialisés à leur valeur par défaut en fonction du type des éléments. Pour les tableaux de nombres (entiers et flottants), la valeur initiale des éléments est zéro; quant aux tableaux de référence, les éléments sont initialisées à la valeur null.
Attention! Définir un tableau d'objets ne définit qu'un tableau de références. Les objets devront être alloués ultérieurement.
 
Date [ ] tabDate = new Date [ 3 ];
tabDate[ 0 ] = new Date(15,9,57);
tabDate[ 1 ] = new Date(28,5,57);
tabDate[ 2 ] = new Date(19,3,91);
L'initialisation d'un tableau peut évidement se faire lors de sa définition et ce, comme en C , à l'aide des accolades :
 
int [ ] tab             = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 } ;
Date [ ] tabDate        = { new Date(15,9,57), new Date(28,5,57), new Date(19,3,91) } ;

11.1.5 Tableaux multidimentionels

Les tableau!multidimentionel sont des tableaux dont les éléments sont eux-mêmes des tableaux. La syntaxe pour la définition d'une matrice 5x5 d'entiers est :
 
int [ ] [ ] mat = new int [ 5 ] [ 5 ];
Date [ ] [ ] matDate = new Date [ 5 ] [ 5 ];

  Comme pour les tableaux unidimentionnels, il est possible de créer un tableau multidimentionels par initialisation :

 
int [ ] [ ] mat = { {11,12,13,14,15}, {21,22,23,24,25}, {31,32,33,34,35}, {41,42,43,44,45}, {51,52,53,54,55} }

11.2 Chaînes de caractères

      Une chaîne de caractères en Java est un objet de la classe java.lang.String. Les objets de type String sont des objets figés; il n'est pas possible de modifier le contenu de tels objets. Il s'agit de constantes de type chaîne de caractère. C'est pourquoi, Java fournit une classe StringBuffer qui implante les chaînes de caractères modifiables et à taille variable.

11.2.1 La classe String

Dans beaucoup de cas, les chaînes de caractères que l'on crée sont des objets constants. Le compilateur Java transforme automatiquement les constantes de type chaînes (voir 3.5.5) de caractères en objet de type String. On peut également créer explicitement un objet de type String avec un des constructeurs de cette classe.

 
String x = "coucou";
String y = new String("Coucou");
String z = x + y;
Outre les constructeurs, la classe String fournit les méthodes pour la

 

   public final class String extends Object implements Serializable, Comparable {
      public String()
      public String(String value)
      public String(char[] value)
      public String(char[] value, int offset, int count)
      public String(byte[] ascii, int hibyte, int offset, int count)
      public String(byte[] ascii, int hibyte)
      public String(byte[] bytes, int offset, int length, String enc) throws UnsupportedEncodingException
      public String(byte[] bytes, String enc) throws UnsupportedEncodingException
      public String(byte[] bytes, int offset, int length)
      public String(byte[] bytes)
      public String(StringBuffer buffer)
      public int length()
      public char charAt(int index)
      public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
      public void getBytes(int srcBegin, int srcEnd, byte[] dst, int dstBegin)
      public byte[] getBytes(String enc) throws UnsupportedEncodingException
      public byte[] getBytes()
      public boolean equals(Object anObject)
      public boolean equalsIgnoreCase(String anotherString)
      public int compareTo(String anotherString)
      public int compareTo(Object o)
      public boolean regionMatches(int toffset, String other, int ooffset, int len)
      public boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len)
      public boolean startsWith(String prefix, int toffset)
      public boolean startsWith(String prefix)
      public boolean endsWith(String suffix)
      public int hashCode()
      public int indexOf(int ch)
      public int indexOf(int ch, int fromIndex)
      public int lastIndexOf(int ch)
      public int lastIndexOf(int ch, int fromIndex)
      public int indexOf(String str)
      public int indexOf(String str, int fromIndex)
      public int lastIndexOf(String str)
      public int lastIndexOf(String str, int fromIndex)
      public String substring(int beginIndex)
      public String substring(int beginIndex, int endIndex)
      public String concat(String str)
      public String replace(char oldChar, char newChar)
      public String toLowerCase(Locale locale)
      public String toLowerCase()
      public String toUpperCase(Locale locale)
      public String toUpperCase()
      public String trim()
      public String toString()
      public char[] toCharArray()
      public static String valueOf(Object obj)
      public static String valueOf(char[] data)
      public static String valueOf(char[] data, int offset, int count)
      public static String copyValueOf(char[] data, int offset, int count)
      public static String copyValueOf(char[] data)
      public static String valueOf(boolean b)
      public static String valueOf(char c)
      public static String valueOf(int i)
      public static String valueOf(long l)
      public static String valueOf(float f)
      public static String valueOf(double d)
      public String intern()
   }

Constructeurs

 public String ()

Ce constructeur permet de créer un objet de type String vide.
 public String (String valeur)
Ce constructeur permet de créer un nouvel objet de type String qui est une copie de l'objet String passé en argument.
 public String (char[ ] valeur) throws NullPointerException
Ce constructeur construit un nouvel objet de type String par recopie des éléments du tableau de caractères passé en argument. Comme il s'agit de recopie, une modification des éléments du tableau postérieure à la création de cet objet String ne le modifiera pas.

Si le tableau est null alors l'exception NullPointerException est lancée.

 public String (char[ ] valeur, int offset, int nombre) throws NullPointerException, IndexOutOfBoundsException
Ce constructeur construit un nouvel objet de type String par recopie des éléments d'un sous tableau du tableau de caractères passé en argument. Le sous tableau à recopier commence à l'indice offset et est de taille nombre. Comme il s'agit de recopie, une modification des éléments du tableau postérieure à la création de cet objet String ne le modifiera pas.

Si le tableau est null alors l'exception NullPointerException est lancée.

L'exception IndexOutOfBoundsException est lancée quand

 public String (byte[ ] valeur, int hibyte) throws NullPointerException
Ce constructeur construit un nouvel objet de type String par recopie des éléments du tableau de caractères passé en argument. La transformation d'un élément b du tableau de byte en caractère c est faite en complétant les 8 bits de poids fort l'argument hibyte d'après la formule :

c == ((hibyte & 0xff}) << 8) | (b & 0xff)

Si le tableau est null alors l'exception NullPointerException est lancée.

 public String (byte[ ] valeur, int hibyte, int offset, int nombre) throws NullPointerException, IndexOutOfBoundsException
Ce constructeur construit un nouvel objet de type String par recopie des éléments d'un sous tableau du tableau de caractères passé en argument. Le sous tableau à recopier commence à l'indice offset et est de taille nombre. La transformation d'un élément b du tableau de byte en caractère c est faite en complétant les 8 bits de poids fort l'argument hibyte d'après la formule :
c == ((hibyte & 0xff}) << 8) | (b & 0xff)

Si le tableau est null alors l'exception NullPointerException est lancée.

L'exception IndexOutOfBoundsException est lancée quand

 public String (StringBuffer buffer) throws NullPointerException
Ce constructeur construit un nouvel objet de type String par recopie des caractères de l'objet StringBuffer passé en argument.

Si l'objet StringBuffer est null alors l'exception NullPointerException est lancée.

 public boolean equals (Object o)

Retourne true si et seulement si Cette méthode est une redéfinition de la méthode equals de la classe Object.

 public boolean equalsIgnoreCase (String s)

Retourne true si et seulement si

 public int compareTo (String s) throws NullPointerException

Cette méthode rend

Si s est null, l'exception NullPointerException est lancée.

 public boolean regionMatches (int toffset, String other, int ooffset, int len)

 

A TERMINER

 public String toLowerCase ()

Convertit une chaîne de caractères en minuscules.
 public String toUpperCase ()
Convertit une chaîne de caractères en majuscules.
 public String replace (char oldChar, char newChar)
Retourne une instance de String où chaque occurence de oldChar est remplacée par newChar.
 public char[] toCharArray ()
Convertit un String en un tableau de caractères.
 public void getChars (int srcBegin, int srcEnd, char dst[], int dstBegin) throws NullPointerException, IndexOutOfBoundsException
Recopie la sous chaîne comprise srcBegin et srcEnd dans le tableau dst à partir de l'indice dstBegin.

 public static String valueOf (type obj)

Retourne une représentation sous forme de String de l'objet obj.

 public int indexOf (int ch)

Retourne l'indice de la première occurrence du caractère ch.
 public int indexOf (int ch, int fromIndex)
Retourne l'indice supérieure à fromIndex de la première occurrence du caractère ch.
 public int indexOf (String str) throws NullPointerException
Retourne l'indice de la première occurrence de la chaîne str.
 public int indexOf (String str, int fromIndex) throws NullPointerException
Retourne l'indice supérieure à fromIndex de la première occurrence de la chaîne str.
 public int lastIndexOf (int ch)
Retourne l'indice de la dernière occurrence du caractère ch.
 public int lastIndexOf (int ch, int fromIndex)
Retourne l'indice supérieure à fromIndex de la dernière occurrence du caractère ch.
 public int lastIndexOf (String str) throws NullPointerException
Retourne l'indice de la dernière occurrence de la chaîne str.
 public int lastIndexOf (String str, int fromIndex) throws NullPointerException
Retourne l'indice supérieure à fromIndex de la dernière occurrence de la chaîne str.

 public String substring (int beginIndex)

retourne la sous chaîne commençant à l'indice beginIndex.
 public String substring (int beginIndex, int endIndex)
retourne la sous chaîne compris entre les indices beginIndex et endIndex.
 public String concat (String str) throws NullPointerException
Retoune un nouveau String résultat de la concaténation de str à l'objet sur lequel s'applique cette méthode.

 public char charAt (int index)

Retourne le caractère à l'indice index.
 public boolean startsWith (String suffix) throws NullPointerException
Retourne true si la chaîne commence par la chaîne suffixe.
 public boolean startsWith (String suffix, int toffset) throws NullPointerException
Retourne true si la sous chaîne débutant à l'indice toffset commence par la chaîne suffixe.
 public boolean endsWith (String suffix) throws NullPointerException
Retourne true si la chaîne se termine par la chaîne suffixe.

  public String trim ()

Supprime les espaces en début et en fin de chaîne.

11.2.2 La classe StringBuffer

Les objets de la classe String sont des objets constants; la chaîne de caractères qu'elles codent ne peuvent être modifiées. Si l'on veut utiliser des chaînes de caractères modifiables, on devra utiliser des objets de la classe StringBuffer.

Un objet de type StringBuffer a un espace de stockage à la création qui est automatiquement redimensionné en fonction des besoins.

 
   public final class StringBuffer extends Object implements Serializable {
      public StringBuffer() 
      public StringBuffer(int length) 
      public StringBuffer(String str) 
      public int length() 
      public int capacity() 
      public void ensureCapacity(int minimumCapacity) 
      public void setLength(int newLength) 
      public char charAt(int index) 
      public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 
      public void setCharAt(int index, char ch) 
      public StringBuffer append(Object obj) 
      public StringBuffer append(String str) 
      public StringBuffer append(char[] str) 
      public StringBuffer append(char[] str, int offset, int len) 
      public StringBuffer append(boolean b) 
      public StringBuffer append(char c) 
      public StringBuffer append(int i) 
      public StringBuffer append(long l) 
      public StringBuffer append(float f) 
      public StringBuffer append(double d) 
      public StringBuffer insert(int offset, Object obj) 
      public StringBuffer insert(int offset, String str) 
      public StringBuffer insert(int offset, char[] str) 
      public StringBuffer insert(int offset, boolean b) 
      public StringBuffer insert(int offset, char c) 
      public StringBuffer insert(int offset, int i) 
      public StringBuffer insert(int offset, long l) 
      public StringBuffer insert(int offset, float f) 
      public StringBuffer insert(int offset, double d) 
      public StringBuffer reverse()  
      public String toString() 
   }

 public StringBuffer ()

Construit une instance de StringBuffer d'une capacité de 16 caractères et qui ne contient aucun caractère.
 public StringBuffer (int length) throws NegativeArraySizeException
Construit une instance de StringBuffer d'une capacité de length caractères et qui ne contient aucun caractère.
 public StringBuffer (String str)
Construit une instance de StringBuffer d'une capacité de 16+taille(str) caractères et qui est rempli avec les caractères de l'objet str. C'est la conversion d'un String en StringBuffer.
 public String toString ()
Retourne un objet String: conversion du StringBuffer en String.
 public int length ()
Retourne le nombre de caractères présents dans l'objet StringBuffer.
 public void setLength (int l) throws IndexOutOfBoundsException
Etend en remplissant du caractères '0000' ou tronque le StringBuffer de sorte que sa taille soit égale à l.
 public int capacity ()
Retourne la taille de la zone allouée pour l'objet.
 public void ensureCapacity (int minimumCapacity)
 

A TERMINER

 public char charAt (int index) throws IndexOutOfBoundsException
Retourne le caractère à l'indice index.
 public void setCharAt (int index, char ch) throws IndexOutOfBoundsException
Le caractère ch devient le caractère d'indice index.
 public void getChars (int srcBegin, int srcEnd, char[] dst, int dstBegin) throws NullPointerException, IndexOutOfBoundsException
Recopie la sous chaîne comprise srcBegin et srcEnd dans le tableau dst à partir de l'indice dstBegin.
 
2#2

 
3#3

 
4#4

 
5#5

 
6#6

 
7#7

 public StringBuffer append (Object obj)

Concatène la représentation textuelle de l'objet obj.
 public StringBuffer append (String str)
Concatène str à l'instance de StringBuffer sur laquelle s'applique cette méthode.
 public StringBuffer append (char[] str)
Concatène la représentation textuelle du tableau de caractères str.
 public StringBuffer append (char[] str, int offset, int len) throws NullPointerException, IndexOutOfBoundsException
Concatène la sous chaîne de caractères str.
Recopie la sous chaîne comprise srcBegin et srcEnd dans le tableau dst à partir de l'indice dstBegin.

 
8#8

 
9#9

 
10#10

 
11#11

 
12#12

 
13#13

 
14#14

 public StringBuffer insert (int offset, Object obj) throws StringIndexOutOfBoundsException

Insère la representation textuelle de obj à l'indice offset.
 public StringBuffer insert (int offset, char[] str) throws StringIndexOutOfBoundsException
Insère la représentation textuelle du tableau de caractères str à l'indice offset.

 public StringBuffer reverse ()

Remplace la suite des caractères du StringBuffer par sa représentation miroir.


next up previous contents index
Next: 12 Conversions et promotions Up: Java: Le langage Previous: 10 Exceptions
Touraivane
6/12/1998