précédent | suivant | table des matières s'évaluer

Chaîne de caractères

Sommaire
  1. String
  2. StringBuffer, StringBuilder
  3. Quelques fonctions «avancées»
    1. Conversion vers les types primitifs.
    2. Formatage.
    3. matches, split, replaceFirst, replaceAll.
    4. StringTokenizer.

Trois classes chaîne de caractères : String, StringBuffer et StringBuilder.

1 String

Les chaînes de caractères littérales de Java (par exemple "abc"), sont représentées comme des instances de cette classe.

La classe String est une classe spéciale : 

1.1 Constructeurs

String(char[] value)
String()
Construit la chaîne vide
String(byte[] bytes)
Construit une chaîne de caractères à partir d’un tableau d’octets
String(byte[] bytes, int offset, int length)
Construit une chaîne de caractères à partir d’une partie de tableau d’octets
String(byte[] bytes, int offset,
          int length,  String enc)
Construit une chaîne de caractères à partir d’une partie de tableau d’octets, et d’un encodage
String(byte[] bytes, String enc)
Construit une chaîne de caractères à partir d’un tableau d’octets, et d’un encodage
Construit une chaîne de caractères à partir d’un tableau de caractères
String(char[] value, int offset, int count)
Construit une chaîne de caractères à partir d’une partie de tableau de caractères
String(String value)
Construit une chaîne à partir d’une autre chaîne.
String(StringBuffer buffer)
Construit une chaîne à partir d’une autre chaîne de type StringBuffer.

La concaténation de chaîne peut également se faire à l’aide de la méthode concat(String s). La méthode length() renvoie la longueur ( nombre de caractères) de la chaîne.

1.2 Comparaisons

int compareTo(Object o)
Compare une chaîne de caractère à un autre objet. Renvoie une valeur <0 ==0 ou > 0
int compareTo(String anotherString)
Compare une chaîne de caractère à un autre objet. Renvoie une valeur <0 ==0 ou > 0. La comparaison est une comparaison lexicographique.
int compareToIgnoreCase(String  str)
Compare une chaîne de caractère à un autre objet. Renvoie une valeur <0 ==0 ou > 0. La comparaison est une comparaison lexicographique, ignorant la casse.
boolean equals(Object anObject)
Compare la chaîne a un objet et retourne true en cas d’égalité et false sinon
boolean equalsIgnoreCase(Object  anObject)
Compare la chaîne a un objet et retourne true en cas d’égalité et false sinon ( on ignore la casse)
boolean regionMatches(boolean ignoreCase, 
    int toffset, String other, 
    int ooffset, int  len)
Teste l’égalité de deux parties de chaînes
boolean regionMatches(int  toffset,
     String other, int ooffset, int len)
Teste l’égalité de deux parties de chaînes

1.3 Caractère et sous-chaîne

char charAt(int i)
Retourne le caractère à l’indice spécifié en paramètre.
String substring(int d)
Sous-chaîne depuis d jusqu’à la fin
String substring(int d, int f)
Sous-chaîne depuis d jusqu’au caractère d’indice f non inclus.
boolean  startsWith(String prefix)
Renvoie true si prefix est un préfixe de la chaîne
boolean startsWith(String  prefix, int i)
Renvoie true si prefix est un préfixe de la chaîne à partir de i.
boolean endsWith(String suffix)
Retourne true si suffix est un suffixe de la chaîne

1.4 Conversions

String toLowerCase()
Retourne une chaîne égale à la chaîne convertie en minuscules.
String toLowerCase(Locale locale)
Retourne une chaîne égale à la chaîne convertie en minuscules.
String toString()
Retourne une chaîne égale à la chaîne
String toUpperCase()
Retourne une chaîne égale à la chaîne convertie en majuscules.
String toUpperCase(Locale locale)
Retourne une chaîne égale à la chaîne convertie en majuscules.
String trim()
Retourne une chaîne égale à la chaîne sans les espaces de début et de fin.
String replace(char ac, char nc)
Retourne une chaîne ou tous les ac ont été remplacé par des nc. S’il n’y a pas de remplacement, la chaîne elle-même est retournée.

static String copyValueOf(char[] data)
Construit une chaîne de caractères à partir d’un tableau de caractères
static String copyValueOf(char[] data, 
     int offset, int count)
Construit une chaîne de caractèresà partir d’une partie de tableau de caractères
byte []getBytes(String enc)
Convertit la chaîne en tableau de byte.
byte []getBytes()
Convertit la chaîne en tableau de byte.
void getChars(int srcBegin, 
   int srcEnd, char[] dst, int dstBegin)
Copie les caractères de la chaîne dans le tableau en paramètres.
char []toCharArray()
Convertit la chaîne de caractères en un tableau de caractères.

static String valueOf(boolean b)
Retourne la représentation en chaîne du booléen
static String valueOf(char c)
Retourne la représentation en chaîne du caractère
static StringvalueOf(char[] data)
Retourne la représentation en chaîne du tableau de caractères
static String valueOf(char[] data, 
   int offset, int count)
Retourne la représentation en chaîne du tableau de caractères (partie)
static String valueOf(double d)
Retourne la représentation en chaîne du double
static String valueOf(float f)
Retourne la représentation en chaîne du float

static String valueOf(int i)
Retourne la représentation en chaîne du int
static String valueOf(long l)
Retourne la représentation en chaîne du long
static String valueOf(Object obj)
Retourne la représentation en chaîne de l’objet

1.5 Recherche

int indexOf(int ch)
Retourne l’indice de la première occurrence du caractère
int indexOf(int ch, int fromIndex)
Retourne l’indice de la première occurrence du caractère à partir de fromIndex
int indexOf(String str)
Retourne l’indice de la première occurrence de la chaîne
int indexOf(String  str, int fromIndex)
Retourne l’indice de la première occurrence de la chaîne à partir de fromIndex
int lastIndexOf(int ch)
Retourne l’indice de la dernière occurrence du caractère
int lastIndexOf(int ch, int fromIndex)
Retourne l’indice de la dernière occurrence du caractère à partir de fromIndex
int lastIndexOf(String str)
Retourne l’indice de la dernière occurrence de la chaîne
int lastIndexOf(String str, int fromIndex)
Retourne l’indice de la dernière occurrence de la chaîne à partir de fromIndex

1.6 Remarque

La classe String maintient un pool de chaînes de caractères. Dans ce pool sont représentées : 

C'est pour celà que la comparaison avec l'opérateur == fonctionne pour les chaines de caractères du pool !

   String s1 = "abcde";
   String s2 = "abcde";
   String s3 = new String (s2);
   String s4 = s3.intern();
   System.out.println(s1==s2);// true les deux sont dans le pool
   System.out.println(s1==s3);// false
   System.out.println(s1==s4);// true les deux sont dans le pool

2 StringBuffer, StringBuilder

Les StringBuffer sont utilisés pour compiler l’opérateur + de la classe String. Par exemple : 

x = "a" + 4 + "c"
est compilé en : 
x = newStringBuffer().append("a").append(4).append("c").toString()
Ces deux classes ont deux attributs :

2.1 Constructeurs

StringBuffer()
Construit une chaîne vide de capacité initiale de 16 caractères.
StringBuffer (int l)
Construit une chaîne vide de capacité initiale de l caractères.
StringBuffer (String s)
Construit une chaîne de caractères à partir de la chaîne s

2.2 Méthodes

int capacity()
la capacité de la chaîne de caractères
int length()
la longueur de la chaîne de caractères

void ensureCapacity (int n)
Cette méthode redimensionne le tableau, si nécessaire, de façon que la capacité de la chaîne soit au moins égale à n
void setLength (int n)
la longueur de la chaîne est n ; les caractères éventuellement ajoutés ont une valeur indéterminée.

2.3 Concaténation

StringBuffer append(boolean b)
Concatène la représentation en chaîne du booléen.
StringBuffer append(char c)
Concatène la représentation en chaîne du caractère.
StringBuffer append(char[] str)
Concatène la représentation en chaîne du du tableau de caractères.
StringBuffer append(char[] str, 
      int offset, int len)
Concatène la représentation en chaîne du tableau de caractères.
StringBuffer append(double d)
Concatène la représentation en chaîne du double.
StringBuffer append(float f)
Concatène la représentation en chaîne du float.
StringBuffer append(int i)
Concatène la représentation en chaîne du int.
StringBuffer append(long l)
Concatène la représentation en chaîne du long.
StringBuffer append(Object obj)
Concatène la représentation en chaîne de l’objet
StringBuffer append(String str)
Concatène la représentation en chaîne de la chaîne.

2.4 Caractère et sous-chaîne.

char charAt(int i)
Retourne le caractère à l’indice spécifié en paramètre.
String substring(int i)
Sous-chaîne depuis i jusqu’à la fin
String substring(int i, int l)
Sous-chaîne depuis i et de longueur l.

2.5 Conversions.

String toString()
Retourne une chaîne égale à la chaîne

2.6 Modifications.

StringBuffer delete(int start, int end)
Enlève tous les caractères compris entre start et end.
StringBuffer deleteCharAt(int index)
Enlève le caractère à l’indice index


3 Fonctions avancées sur les chaînes de caractères.

3.1 Conversions vers les types primitifs.

Les classes Byte, Short, Integer et Long possèdent une méthode X.parseX(String s) et une méthode X.parseX(String s, int b) qui permettent de convertir une chaîne de caractères en un entier en considérent cet entier ecrit dans la base b. Si cette conversion n'est pas possible il y levée d'une exception NumberFormatException.

exemple :

   byte b = Byte.parseByte("-3f", 16);
   System.out.println(b);
affiche -63 à la console.

Les classes Float et Double possèdent une méthode X.parseX(String s) qui permet de convertir une chaîne de caractères en un flottant. Si cette conversion n'est pas possible il y levée d'une exception NumberFormatException.

La classe Boolean possède une méthode Boolean.parseBoolean(String s) qui permet de convertir une chaîne de caractères en un booléen. Le résultat est true si et seulement si la chaîne de caractères s est non null et si la valeur de la chaîne est "true".

3.2 Formatage.

La classe String est munie de deux méthodes format qui permettent de construire des chaînes de caractères formatées.

public static String format(String format, Object... args)
public static String format(Locale l, String format, Object... args)

Exemple :

String s = String.format("|%05d| |%4.2f| |%-4c|", 
         123, 3.14159, 'a');
System.out.println(s);
affiche à la console :
|00123| |3,14| |a   |

Le paramètre format est une chaîne de caractères contenant des spécificateurs de format de structure générale :  %[argument_index$][flags][width][.precision]conversion. Ce qui est entre [] est facultatif.

Nous allons préciser succintement le sens des différents constituants d'un spécificateur de format, pour plus de précision voir ici.

Conversion
Description
'b' 'B'
Si l'argument correspondant est null, alors le résultat est false, si l'argument correspondant est un booléen, le résultat est la valeur du booléen, sinon c'est true
'h' 'H'
Si l'argument est null alors le résultat est null, sinon le résultat est obtenu par l'appel de Integer.toHexString(arg.hashCode()). Pour un entier, on a sa valeur en héxadécimal.
's' 'S'
Si l'argument est null alors le résultat est null, sinonsi l'argument implémente Formattable,alors arg.formatTo est appelé, sinonle résultat est obtenu en appelant toString().
'c' 'C'
Le résultat est le caractère unicode.
'd'
Le résultat est un entier décimal.
'o'
Le résultat est un entier octal.
'x' 'X'
Le résultat est un entier héxadécimal.
'e' 'E'
Le résultat est un nombre flottant en notation scientifique.
'f'
Le résultat est un nombre flottant en notation décimale (avec un point ou une virgule suivant la locale).
'g' 'G'
Le résultat est un nombre flottant en notation décimale, ou scienttifique suivant sa valeur.
'a' 'A'
Le résultat est un nombre flottant en héxadécimal, avec son exposant et son significande.
't' 'T'
date et time.
'%'
le résultat est %.
'n'
Le résultat est le séparateur de lignes.

La partie width est le nombre de caractères minimum utilisés pour écrire l'argument correspondant.

La partie precision est en général le nombre de caractères maximum utilisés pour écrire l'argument correspondant. Pour les nombres flottants ecrits en décimal, il s'agit du nombre de chiffres après la virgule. Pour les nombre entiers, les dates, le % et le séparateur delignes une exception est levée.

Flag
Description
'-'
le résultat est justifié à gauche.
'#'
'+'
Le résultat a toujours son signe.
' '
Le résultat a toujours un espace devant les valeurs positives.
'0'
Le résultat est étendu à gauche avec des 0.
','
'('
Les nombres négatifs sont entre parenthèses.

3.3 matches, split, replaceAll, replaceFirst.

la classe String contient des méthodes ayant un paramètre qui est une expression régulière.

boolean matches(String regex)
Retourne true si la chaîne de caractères s'apparie avec l'expression régulière et false sinon. Un appel s.matches(regexp) a le résultat est le même qu'un appel de Pattern.matches(regex, s)
String replaceAll(String regex,
      String replacement)
Retourne la chaîne dans laquelle on a remplacé tous les appariements de regex par replacement
String replaceFirst(String regex,
      String replacement)
Retourne la chaîne dans laquelle on a remplacé le premier appariement de regex par replacement.
String[]split(String regex)
Les différents appariements de regex découpent la chaîne de caractères en plusieurs chaînes. Ces chaînes sont retournées dans un tableau de chaînes de caractères.

Exemple : le code suivant permet de découper un texte en mots et range ces mots dans un tableau.

String s = "....";
String[] t = s.split("[.,;:?!' ]+");
for( int i = 0; i<t.length; ++i) System.out.println(t[i]);

3.4 StringTokenizer.

La classe StringTokenizer permet de découper une chaîne de caractères en jetons (token). Le résultat du découpage est donné comme une énumération.

Constructeurs

StringTokenizer(String s)
Construit un StringTokenizer sur la chaîne s utilisant les délimiteurs par défaut : 
" \t\n\r\f"
StringTokenizer(String s, String delim)
Construit un StringTokenizer sur la chaîne s utilisant les délimiteurs contenus dans delim.
StringTokenizer(String s, String delim,
    boolean retourneDelim)
Construit un StringTokenizer sur la chaîne s utilisant les délimiteurs contenus dans delim, les délimiteurs faisant partie du jeton retourné.

Méthodes

public boolean hasMoreTokens()
Retourne true s'il reste des jetons dans la chaîne et false sinon.
public String nextToken()
Retourne le jeton suivant s'il existe et lève une exception NoSuchElementException sinon.
public String nextToken(String delim)
Retourne le jeton suivant, en utilisant les délimiteurs delim, s'il existe et lève une exception NoSuchElementException sinon.
public boolean hasMoreElements()
Retourne true s'il reste des jetons dans la chaîne et false sinon.
public Object nextElement()
Retourne le jeton suivant s'il existe et lève une exception NoSuchElementException sinon.
public int countTokens()
Retourne le nombre de jetons restant, en utilisant l'ensemble de délimiteurs courant.

Exemple :  le code  :

StringTokenizer s = new StringTokenizer("Ceci est un, petit, test");
while (s.hasMoreTokens()) {
   System.out.println(s.nextToken());
}

Affiche le résultat suivant :

Ceci
est
un
petit
test

haut de la page