Page précédenteIndexPage suivante

CHAPITRE 4- Les chaînes de caractères

Nous aborderons dans ce chapitre les objets String, StringBuffer et StringTokenizer.

4.1- Les objets String

Instanciation d'un objet String

Les chaînes de caractères sont des instances de la classe java.lang.String. Elles peuvent être construites :

1- A partir d'un tableau de caractères:

char[] cListeDeChar={'t','o','t','o'};
String sMaChaine=new String(cListeDeChar);

2- Directement Par une chaîne:

String sMaChaine="toto";

La ligne de la méthode 2 est équivalente aux deux lignes de la méthode 1.

Il faut saisir correctement la signification de la ligne String sMaChaine="toto";. Le compilateur crée lui-même un objet String valant "toto" et en renvoie une référence. C'est la raison pour laquelle nous n'avons pas eu à instancier explicitement sMaChaine. Ce mode d'instanciation est particulier aux chaînes de caractères et a été mis en place pour d'évidentes raisons de simplicité.


Les String sont constants

Il n'existe pas de méthode permettant de modifier directement un String. Par exemple, un hypothétique "sMaChaine[3]='o' " n'existe pas. En revanche, il est possible de stocker le résultat d'une modification dans un autre String puis de positionner la référence du premier String sur le nouvel objet :

sMaChaine=sMaChaine.trim(); //supprime les blancs en début et fin de String

sMaChaine.trim() renvoie un objet de type String et nous déplaçons la référence sur ce nouvel objet.

Longueur d'une chaîne

Pour obtenir la longueur d'une chaîne de caractère, il est possible d'utiliser la méthode length() qui renvoie un entier représentant le nombre de caractères de la chaîne. Attention! à ne pas confondre la méthode String.length() avec la propriété length d'un tableau.

Principales méthodes de la classe String

Méthode

Description

char charAt(int index)

Renvoie le caractère à la position index

boolean equals(String sOtherString)

Renvoie vrai si le String sur lequel est appliqué la méthode equals est égal à sOtherString

int indexOf(String sMaChaine)

Renvoie l'index de la première occurrence de la chaîne sMaChaine.

String substring(int iDepart,int iFin)

Renvoie un String contenant la chaîne de départ de l'index iDebut à l'index iFin-1.
Plus simplement, iFin-iDebut vaut la longueur de la sous-chaine.

char[] toCharArray()

Renvoie un tableau de caractères

String toUpperCase()

Renvoie la version tout en majuscules de cette chaîne

String toLowerCase()

Renvoie la version tout en minuscules de cette chaîne

String trim()

Renvoie un String valant le String de départ sans
les blancs et caractères spéciaux en début et fin de chaîne.

static String valueOf(
int / boolean / double / float / long )

Renvoie un String correspondant à la valeur du primitif donné en argument.
Par exemple, String.valueOf(2) renverra "2"
Remarque: l'opération inverse peut être réalisée par:
int i=Integer.parseInt("2");



Égalité de deux chaînes

ATTENTION! pour comparer deux chaînes, ne pas faire:

String sMaChaine1="toto";
String sMaChaine2="toto";
if (sMaChaine1 == sMaChaine2){

Car ce test renverra toujours false. En effet, dans ce cas, ce sont les deux références qui sont comparées, c'est-à-dire les valeurs des zones mémoire de ces deux objets. Plutôt faire:

String sMaChaine1="toto";
String sMaChaine2="toto";
if (sMaChaine1.equals(sMaChaine2)){

car nous utilisons la méthode equals de String qui va faire une comparaison caractères par caractères des deux chaînes.


Concaténation

L'opérateur '+' permet de concaténer deux chaînes ou une chaîne et un primitif:

String s1="Hello";
String s2="World";
String s=s1+" "+s2;

s vaut "Hello World"

String s1="x=";
int i=2;
String s=s1+i;

s vaut "x=2"

Ainsi, l'opérateur '+' connaît un polymorphisme paramétrique et ne se comporte pas de la même façon en fonction du type de ses deux arguments. Ainsi, Le '+' des exemples précédents est le '+' de la concaténation alors que le '+' prenant en argument deux primitifs ( dans 1+2 par exemple ) est le '+' arithmétique.

Méthode toString()

Toutes les classes depuis Object possèdent une méthode toString() qui renvoie un String.
String toString()

Cette méthode sert à renvoyer une chaîne de caractère donnant des informations sur l'objet courant sous la forme d'une chaîne de caractères. Par exemple, la méthode toString() de la classe Object renvoie simplement le hashcode de l'objet. Il est ensuite possible de surcharger cette méthode pour donner davantage d'informations.

La méthode println() de OutputStream qui est très utilisée exécute toujours la méthode toString() et affiche la chaîne renvoyée.
donc faire:
Integer i=new Integer(2);
System.out.println(i);

est équivalent à :

System.out.println(i.toString());



4.2- Les objets StringBuffer

Le StringBuffer est une chaîne de caractère présentant certains avantages de manipulations et de performances. Un StringBuffer est une chaîne de caractère modifiable. La classe StringBuffer possède en effet des méthodes permettant d'effectuer des modifications sur l'objet lui-même. Par exemple, ce qui était impossible pour le String ( modifier un caractère de la chaîne ) est possible pour le StringBuffer grâce à sa méthode setCharAt.

Principales méthodes de la classe StringBuffer

Méthode

Description

char charAt(int index)

Renvoie le caractère à cette position

void delete(int iDebut,int iFin)

Supprime les caractères de la chaîne de iDebut à iFin-1

StringBuffer deleteCharAt(int iIndex)

Supprime le caractère à cette position

void setCharAt(int iIndex,char cChar)

Fixe le caractère de la chaine à l'index iIndex au char donné en argument.

boolean equals(String sOtherString)

Renvoie vrai si le String sur lequel est appliqué la méthode equals est égal à sOtherString

StringBuffer insert(int iIndex, String str)

 

Insére la chaîne str à l'index iIndex.

StringBuffer replace(int iDebut, int iFin, String str)

Remplace la chaîne par la chaine str de l'index
iDebut à l'index iFin-1.

String substring(int iDepart,int iFin)

Ne conserve de la chaîne que les caractères de l'index iDebut à l'index iFin-1.
Plus simplement, iFin-iDebut vaut la longueur de la sous-chaine.

String toString()

Renvoie le String correspondant à cette chaîne.



4.3- La classe StringTokenizer

Cette classe du package java.util sert à couper une chaîne en sous-chaînes de façon rapide. Le constructeur le plus courant est:
StringTokenizer(String sInput,String sSeparator){}

N'importe quelle chaîne peut servir de séparateur ( un ou des espaces, des slashs, tirets...). La méthode nextToken() renvoie un String contenant la sous-chaîne suivante. La méthode hasMoreTokens() renvoie true s'il reste des chaînes. Exemple:

String sMonText="toto titi tata";
StringTokenizer st1=new StringTokenizer(sMonText," ");
String s1=st1.nextToken(); //s1 vaut "toto"
String s2=st1.nextToken(); //s2 vaut "titi"
String s3=st1.nextToken(); //s3 vaut "tata"



TD 4 - Les chaînes de caractères

Exercice 1: Saisie d'une chaîne

Programmer une application Java qui demande à l'utilisateur de saisir son nom. Lors de la validation, afficher "Bonjour <nom de l'utilisateur>". Une méthode spécifique de lecture de caractères devra être implémenté en utilisant la fonction System.in.read();

Exemple :

Entrez votre Nom : Toto

Bonjour Toto

Exercice 2: Affichage d'une chaîne

Demandez la saisie d'un message puis afficher ce dernier de façon indentée.

Exemple:

Chaîne : toto

t
to
tot
toto

Exercice 3 : Les StringBuffer

1- Instanciez un StringBuffer à partir d'une chaîne valant "toto"

2- Modifiez cette chaîne en remplaçant les 'o' par des 'i'.

3- Affichez la nouvelle chaîne sous la forme : "Nouvelle chaîne =" et la nouvelle chaîne.


Exercice 4 : Les StringTokenizer

1- Utilisez la classe StringTokenizer à partir d'une chaîne valant "#1=toto#2=titi#3=tata" avec les séparateurs appropriés pour reconstituer et afficher les valeur de toto, titi et tata sous la forme:

1:toto
2:titi
3:tata

en utilisant les méthodes de la classe StringTokenizer.


solutions





Page précédenteIndexPage suivante