Nous aborderons dans ce chapitre les objets String, StringBuffer et StringTokenizer.
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é.
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.
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.
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.
|
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 |
static String valueOf( |
Renvoie un
String correspondant à la valeur du primitif
donné en argument. |
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.
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.
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());
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.
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 |
String substring(int iDepart,int iFin) |
Ne
conserve de la chaîne que les caractères de l'index
iDebut à l'index iFin-1. |
String toString() |
Renvoie le String correspondant à cette chaîne. |
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"
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
Demandez la saisie d'un message puis afficher ce dernier de façon indentée.
Exemple:
Chaîne : toto
t
to
tot
toto
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.
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.