Académique Documents
Professionnel Documents
Culture Documents
CARACTERES
Java dispose d’une classe standard nommée String, permettant de manipuler des chaînes de
caractères, c’est-à-dire des suites de caractères. Les constantes chaînes telles que "bonjour" ne
sont en fait que des objets de type String construits automatiquement par le compilateur.
Nous allons étudier les fonctionnalités de cette classe String, qui correspondent à ce que l’on
attend pour des chaînes : longueur, accès aux caractères d’une chaîne par leur position,
concaténation, recherche d’occurrences de caractères ou de sous-chaînes, conversions entre
types primitifs et type String.
Nous verrons que Java fait preuve d’une certaine originalité en prévoyant que les objets de type
String ne soient pas modifiables. Ils restent cependant utilisables pour créer un nouvel objet ;
c’est ce qui permettra de réaliser des opérations de remplacement ou de passage en majuscules
ou en minuscules.
Lorsque le programmeur aura besoin de manipuler intensivement des chaînes, il pourra, s’il
souhaite privilégier l’efficacité de son programme, recourir à une autre classe StringBuffer.
Contrairement à String, celle-ci autorise la modification directe de son contenu. En revanche,
nous verrons que les méthodes utilisées sont, pour la plupart, différentes de celles de la classe
String.
Il existe d’autres manières de comparer deux chaines de caractères. Cela est possible en utilisant
d’autre méthode comme indiqué dans le tableau ci-dessous :
Compare une chaîne de caractère à un autre objet. Renvoie
int compareTo(Object o)
une valeur <0 ==0 ou > 0
boolean regionMatches(boolean
ignoreCase,
Teste l’égalité de deux parties de chaînes
int toffset, String other,
int ooffset, int len)
boolean regionMatches(int
toffset, Teste l’égalité de deux parties de chaînes
String other, int ooffset, int len)
Autre Exemple :
Ch1 Ch2 Ch1.compareTo(Ch2)
"bonjour" "monsieur" négatif
"bonj" "bonjour" négatif
"paris2" "paris10" positif (car ’2’ > ’1’)
"Element" "element" négatif (car ’E’ < ’e’)
"Element" "élément" négatif (car ’E’ < ’é’)
"element" "élément négatif (car ’e’ < ’é’)
4. Modification de chaine
Les objets de type String ne sont pas modifiables. Mais, la classe String dispose de quelques
méthodes qui, à l’instar de l’opérateur +, créent une nouvelle chaîne obtenue par transformation
de la chaîne courante.
Remplacement de caractères
La méthode replace crée une chaîne en remplaçant toutes les occurrences d’un caractère donné
par un autre. Par exemple :
String ch = "bonjour" ;
String ch1 = ch.replace(‘o’, ‘a’) ; // ch n’est pas modifiée
// ch1 contient "banjaur"
Extraction de sous-chaîne
La méthode substring permet de créer une nouvelle chaîne en extrayant de la chaîne courante :
• Soit tous les caractères depuis une position donnée,
String ch = "anticonstitutionnellement" ;
String ch1 = ch.substring (5) ; // ch n’est pas modifiee
// ch1 contient "onstitutionnellement"
• Soit tous les caractères compris entre deux positions données (la première incluse, la
seconde exclue) :
String ch = "anticonstitutionnellement" ;
String ch1 = ch.substring (4, 16) ; // ch n’est pas modifiee
// ch1 contient "constitution"
On peut remarquer que l’instruction :
String sousCh = ch.substring (n, p) ;
Fournit le même résultat que :
String sousCh = "" ;
for (int i=n ; i<p ; i++)
sousCh += ch.charAt(i) ;
5. Tableaux de chaine
On peut former des tableaux avec des éléments de n’importe quel type, y compris de type classe,
donc en particulier des tableaux de chaînes. Voici un exemple de programme qui effectue un
tri lexicographique de chaînes :
public class TriCh
{ public static void main (String args[])
{ String tabCh [] = {"java", "c", "pascal", "c++", "ada", "basic", "fortran" } ;
String temp ; // pour l’Echange de deux références
int i, j ;
int nbCh = tabCh.length ;
for (i=0 ; i<nbCh-1 ; i++)
for (j=i ; j<nbCh ; j++)
if ( (tabCh[i].compareTo(tabCh[j])) > 0)
{ temp = tabCh [i] ;
tabCh [i] = tabCh [j] ;
tabCh [j] = temp ;
}
System.out.println ("chaines triees : ");
for (i=0 ; i<nbCh ; i++) System.out.println (tabCh[i]) ;
}
}
Chaines triées :
ada
basic
c
c++
fortran
java
pascal
7. La classe StringBuffer
Les objets de type String ne sont pas modifiables mais nous avons vu qu’il était possible de les
employer pour effectuer la plupart des manipulations de chaînes. Cependant, la moindre
modification d’une chaîne ne peut se faire qu’en créant une nouvelle chaîne (c’est le cas d’une
simple concaténation). Dans les programmes manipulant intensivement des chaînes, la perte de
temps qui en résulte peut devenir gênante. C’est pourquoi Java dispose d’une classe
StringBuffer destinée elle aussi à la manipulation de chaînes, mais dans laquelle les objets sont
modifiables.
La classe StringBuffer dispose de fonctionnalités classiques mais elle n’a aucun lien d’héritage
avec String et ses méthodes ne portent pas toujours le même nom. On peut créer un objet de
type StringBuffer à partir d’un objet de type String. Il existe des méthodes :
• De modification d’un caractère de rang donné : setCharAt,
• D’accès à un caractère de rang donné : charAt,
• D’ajout d’une chaîne en fin : la méthode append accepte des arguments de tout type
primitif et de type String,
• D’insertion d’une chaîne en un emplacement donné : insert,
• De remplacement d’une partie par une chaîne donnée : replace,
• De conversion de StringBuffer en String : toString.
Voici un programme utilisant ces différentes possibilités :
class TstStB
{ public static void main (String args[])
{ String ch = "la java" ;
StringBuffer chBuf = new StringBuffer (ch) ;
System.out.println (chBuf) ;
chBuf.setCharAt (3, ‘J’) ; System.out.println (chBuf) ;
chBuf.setCharAt (1, ‘e’) ; System.out.println (chBuf) ;
chBuf.append (" 2") ; System.out.println (chBuf) ;
chBuf.insert (3, "langage ") ; System.out.println (chBuf) ;
}
}
Résultat :
la java
la Java
le Java
le Java 2
le langage Java 2