Médiaforma

Java – La classe String

Print Friendly

Les constantes, variables et méthodes de cette classe sont immédiatement accessibles sans qu’il soit nécessaire d’utiliser une instruction import. La déclaration suivante est implicite :

import java.lang.*;

Le constructeur

Le constructeur permettant de définir un objet String peut prendre de nombreuses formes :

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);
public String(byte bytes[], String enc);
public String(byte bytes[], int offset, int length);
public String(byte bytes[]);

Examinons quelques-unes de ces variantes.

La première forme permet de construire un objet String vide :

public String();

Exemple :

String S = new String("");

ou encore :

String S = "";

Comme vous le remarquez, le mot clé new n’est pas obligatoire pour définir un objet String. Cette particularité de la classe String est bien pratique, car elle allège sensiblement l’écriture. Mais attention, les « mauvaises » habitudes sont très vite prises : la définition d’un objet appartenant à une autre classe que String passe obligatoirement par l’opérateur new.

La deuxième forme permet d’affecter une valeur à un nouvel objet String :

public String(String value);

Exemple :

String S = String("Ceci est un objet String");

ou encore :

String S = "Ceci est un objet String";

La troisième forme utilise le contenu d’un tableau de caractères pour construire un nouvel objet String :

public String(char value[]);

Exemple :

char C[] = {'a', 'b', 'c', 'd', 'e', 'f'};
String S = new String(C);

La quatrième forme permet d’affecter une partie d’un tableau de caractères à un nouvel objet String. Le premier paramètre représente le nom du tableau de caractères ; le deuxième la position du premier caractère à affecter à l’objet String, et le troisième le nombre de caractères consécutifs à affecter :

public String(char value[],int offset, int count);

Exemple :

char C[] = {'a', 'b', 'c', 'd', 'e', 'f'};
String S = new String(C,2,3);

A ce niveau, l’objet S a pour valeur « cde ».

La cinquième forme construit un nouvel objet String à partir d’un tableau de bytes. Le premier paramètre représente le tableau de bytes. Le deuxième paramètre (généralement égal à 0) correspond au poids fort des valeurs Unicode du tableau. Les troisième et quatrième paramètres représentent la position du premier élément du tableau et le nombre d’éléments du tableau à affecter à l’objet String :

public String(byte ascii[],int hibyte, int offset, int count);

Exemple :

byte C[] = {'a', 'b', 'c', 'd', 'e', 'f'};
String S = new String(C,0,2,3);

A ce niveau, l’objet S a pour valeur « cde ».

Enfin, la sixième forme construit un nouvel objet String à partir d’un tableau de bytes. Le premier paramètre représente le tableau de bytes. Le deuxième paramètre (généralement égal à 0) correspond au poids fort des valeurs Unicode du tableau :

public String(byte ascii[], int hibyte);

Exemple :

byte C[] = {'a', 'b', 'c', 'd', 'e', 'f'};
String S = new String(C,0);

Les méthodes

charAt()

Cette méthode renvoie le caractère qui occupe la position spécifiée dans l’argument. Le premier caractère occupe la position 0 et le dernier la position length() – 1 :

public char charAt(int index)

Exemple :

public class Test {
  public static void main (String args[]) throws java.io.IOException
  {
    String S = "String";
    int i;
    for (i=0; i<=S.length() - 1; i++)
      System.out.println("Le caractère en position " + i + " est " + S.charAt(i));
  }
}

Après avoir affecté une chaîne à l’objet String S :

String S = "String";

Une boucle for utilise la méthode charAt() pour extraire tous les caractères de l’objet S :

for (i=0; i<=S.length() - 1; i++)
  System.out.println("Le caractère en position " + i + " est " + S.charAt(i));

Voici le résultat :
 

 
compareTo()

La méthode compareTo() compare deux objets String. Elle renvoie :

  • Un entier nul si les deux chaînes sont égales.
  • Un entier positif si la première chaîne est « supérieure » à la deuxième.
  • Un entier négatif si la première chaîne est « inférieure » à la deuxième :

public int compareTo(String anotherString)

Exemple :

public class Test {
  public static void main (String args[]) throws java.io.IOException
  {
    String S1, S2;

    System.out.println("Entrez une chaîne : ");
    S1 = Lit();
    System.out.println("Entrez une autre chaîne : ");
    S2 = Lit();
    if (S1.compareTo(S2) == 0)
      System.out.println("Les deux chaînes sont identiques");
    else
      System.out.println("Les deux chaînes sont différentes");
  }
  public static String Lit() throws java.io.IOException
  {
    String S = "";
    char C;
    while ((C=(char)System.in.read()) != '\r')
    {
      S = S + C;
    }
    C=(char)System.in.read();
    return S;
  }
}

Après avoir lu et mémorisé les deux chaînes entrées au clavier :

System.out.println("Entrez une chaîne : ");
S1 = Lit();
System.out.println("Entrez une autre chaîne : ");
S2 = Lit();

le programme utilise la méthode compareTo() pour comparer ces deux chaînes. Un message ou un autre est affiché en fonction de leur égalité :

if (S1.compareTo(S2) == 0)
  System.out.println("Les deux chaînes sont identiques");
else
  System.out.println("Les deux chaînes sont différentes");

concat()

La méthode concat() concatène la chaîne spécifiée dans les parenthèses à la suite de la chaîne en préfixe :

public String concat(String str)

Exemple :

public class Test {
  public static void main (String args[]) throws java.io.IOException {
    String S1, S2;
    System.out.println("Entrez une chaîne : ");
    S1 = Lit();
    System.out.println("Entrez une autre chaîne : ");
    S2 = Lit();
    System.out.println("La concaténation de ces deux chaînes est : " + S1.concat(S2));
  }
  public static String Lit() throws java.io.IOException {
    String S = "";
    char C;
    while ((C=(char)System.in.read()) != '\r') {
      S = S + C;
    }
    C=(char)System.in.read();
    return S;
  }
}

Le premier bloc d’instructions lit deux chaînes et les place dans les objets S1 et S2.

System.out.println("Entrez une chaîne : ");
S1 = Lit();
System.out.println("Entrez une autre chaîne : ");
S2 = Lit();

Puis les valeurs contenues dans ces deux objets sont concaténées à l’aide de la méthode concat() et affichées sur l’écran :

System.out.println("La concaténation de ces deux chaînes est : " + S1.concat(S2));

Remarque

Les deux instructions suivantes sont équivalentes :

System.out.println(S1.concat(S2));
System.out.println(S1 + S2);

copyValueOf()

La méthode copyValueOf() copie une partie ou la totalité d’un tableau de caractères dans un objet String :

public static String copyValueOf(char data[], int offset, int count)
public static String copyValueOf(char data[])

Exemple :

public class Test {
  public static void main (String args[]) throws java.io.IOException {
    char C[] = {'a', 'b', 'c', 'd', 'e', 'f'};
    String S = String.copyValueOf(C, 2, 3);
    System.out.println(S);
  }
}

Dans cet exemple, le premier caractère copié occupe la position 2. Trois caractères sont copiés dans l’objet S. L’instruction print affiche donc « cde ».

endsWith()

La méthode endsWith() renvoie la valeur booléenne true si la chaîne se termine par l’argument et une valeur false dans le cas contraire :

public boolean endsWith(String suffix)

Exemple :

public class Test {
  public static void main (String args[]) throws java.io.IOException {
    String S1, S2;

    System.out.println("Entrez une chaîne : ");
    S1 = Lit();

    if (S1.endsWith("e"))
      System.out.println("Cette chaîne se termine par la lettre e.");
    else
      System.out.println("Cette chaîne ne se termine pas par la lettre e.");
  }

  public static String Lit() throws java.io.IOException {
    String S = "";
    char C;
    while ((C=(char)System.in.read()) != '\r') {
      S = S + C;
    }
    C=(char)System.in.read();
    return S;
  }
}

Le premier bloc d’instructions lit une chaîne de caractères et la stocke dans la variable S1 :

System.out.println("Entrez une chaîne : ");
S1 = Lit();

Le deuxième bloc d’instructions affiche un texte ou un autre selon que la chaîne entrée se termine ou que pas par la lettre « e » :

if (S1.endsWith("e"))
  System.out.println("Cette chaîne se termine par la lettre e.");
else
  System.out.println("Cette chaîne ne se termine pas par la lettre e.");

equals()

La méthode equals() compare la valeur de deux objets String. Elle renvoie la valeur true si les deux valeurs sont identiques et la valeur false dans le cas contraire :

public boolean equals(Object anObject)

Exemple :

Supposons que S1 et S2 soient deux objets String initialisés. L’instruction ci-après affiche un texte ou un autre selon que ces deux chaînes sont égales ou différentes :

if (S1.equals(S2))
  System.out.println("Les deux chaînes sont identiques");
else
  System.out.println("Les deux chaînes sont différentes");

equalsIgnoreCase()

La méthode equalsIgnoreCase() compare la valeur de deux objets String sans différencier les majuscules des minuscules. Elle renvoie la valeur true si les deux valeurs sont « identiques » et la valeur false dans le cas contraire :

public boolean equalsIgnoreCase(String anotherString)

Exemple :

Supposons que S1 et S2 soient deux objets String initialisés. L’instruction ci-après affiche un texte ou un autre selon que ces deux chaînes sont égales ou différentes :

if (S1.equalsIgnoreCase(S2))
  System.out.println("Les deux chaînes sont identiques");
else
  System.out.println("Les deux chaînes sont différentes");

Si, par exemple, S1= »AZERTY » et S2= »AZErTY », la méthode equalsIgnoreCase() renvoie la valeur true car les deux chaînes sont considérées comme identiques.

getChars()

La méthode getChars() copie un ou plusieurs caractères d’un objet String dans un tableau de char :

public void getChars(int srcBegin, int srcEnd, char dst[], int dstBegin)
  • srcBegin est la position du premier caractère dans l’objet String ;
  • srcEnd est la position du dernier caractère dans l’objet String ;
  • dst[] est le tableau de char destination ;
  • dstBegin est la position du premier caractère dans le tableau destination.

Exemple :

public class Test {
  public static void main (String args[]) throws java.io.IOException {
    char C[] = {'a', 'b', 'c', 'd', 'e', 'f'};
    String S = "ABCDEF";

    System.out.println("Au départ, le tableau C contient les caractères a, b, c, d, e et f");
    System.out.println("et la chaîne S les caractères ABCDEF");
    S.getChars(1,3,C,1);
    System.out.println("L'instruction S.getChars(1,3,C,1) modifie le tableau C comme suit :");
    String S2 = new String(C);
    System.out.println(S2);
  }
}

Les deux premières instructions définissent et initialisent un tableau de bytes et un objet String :

byte C[] = {'a', 'b', 'c', 'd', 'e', 'f'};
String S = "ABCDEF";

Après avoir affiché le contenu du tableau C et de l’objet S :

System.out.println("Au départ, le tableau C contient les caractères a, b, c, d, e et f");
System.out.println("et la chaîne S les caractères ABCDEF");

la méthode getChars() est utilisée pour copier les caractères 1 à 3 de l’objet S dans le tableau C :

S.getChars(1,3,C,1);

Le résultat est alors affiché. Comme vous le voyez, le tableau de chars C a été converti en un objet String pour faciliter son affichage :

System.out.println("L'instruction S.getChars(1,3,C,1) modifie le tableau C comme suit :");
String S2 = new String(C);
System.out.println(S2);

Voici le résultat :
 

 
hashCode()

Cette méthode retourne le hashcode (chaque objet Java possède un hashcode qui lui est propre) de l’objet sur lequel elle est appliquée :

public int hashCode();

indexOf()

La méthode indexOf() permet de localiser un caractère ou une sous-chaîne dans un objet String. Elle renvoie la valeur -1 si le caractère ou la chaîne recherchée ne fait pas partie de l’objet String. Cette méthode admet quatre syntaxes :

public int indexOf(int ch)
public int indexOf(int ch, int fromIndex)
public int indexOf(String str)
public int indexOf(String str, int fromIndex)

La première syntaxe renvoie la position de la première occurrence de ch dans l’objet String :

public int indexOf(int ch)

La deuxième syntaxe renvoie la position de la première occurrence de ch dans l’objet String, à partir de la position fromIndex :

public int indexOf(int ch, int fromIndex)

La troisième syntaxe renvoie la position de la première occurrence de la sous-chaîne str dans l’objet String :

public int indexOf(String str)

Enfin, la quatrième syntaxe renvoie la position de la première occurrence de la sous-chaîne str dans l’objet String, à partir de la position fromIndex :

public int indexOf(String str, int fromIndex)

Exemple :

public class Test {
  public static void main (String args[]) throws java.io.IOException {
    System.out.println("Entrez une chaîne : ");
    String S = Lit();
    System.out.println("Entrez un caractère : ");
    char Ch = (char) System.in.read();
    int Position = S.indexOf(Ch);
    if (Position == -1)
      System.out.println("Le caractère ne fait pas partie de la chaîne.");
    else
      System.out.println("Le premier caractère " + Ch + " se trouve en position " + Position);
  }
  public static String Lit() throws java.io.IOException {
    String S = "";
    char C;
    while ((C=(char)System.in.read()) != '\r') {
      S = S + C;
    }
    C=(char)System.in.read();
    return S;
  }
}

Après avoir saisi une chaîne de caractères :

System.out.println("Entrez une chaîne : ");
String S = Lit();

et un caractère unique :

System.out.println("Entrez un caractère : ");
char Ch = (char) System.in.read();

le programme recherche la première position du caractère dans la chaîne à l’aide de la méthode indexOf(). Le résultat est stocké dans la variable int Resultat :

int Position = S.indexOf(Ch);

Le message qui en découle est fonction de la valeur de Resultat. Si Resultat vaut -1, le caractère n’a pas été trouvé :

if (Position == -1)
  System.out.println("Le caractère ne fait pas partie de la chaîne.");

Dans le cas contraire, la position de sa première occurrence est affichée :

else
  System.out.println("Le premier caractère " + Ch + " se trouve en position " + Position);

intern()

La méthode intern() renvoie un objet String qui occupe la même place mémoire que celui sur lequel il est appliqué :

public String intern()

Exemple :

String S1 = "coucou";
String S2 = S1.intern();

lastIndexOf()

La méthode lastindexOf() permet de localiser la dernière position d’un caractère ou une sous-chaîne dans un objet String. Elle renvoie la valeur -1 si le caractère ou la chaîne recherchée ne fait pas partie de l’objet String. Cette méthode admet quatre syntaxes :

public int lastIndexOf(int ch)
public int lastIndexOf(int ch, int fromIndex)
public int lastIndexOf(String str)
public int lastIndexOf(String str, int fromIndex)

La première syntaxe renvoie la position de la dernière occurrence de ch dans l’objet String :

public int lastIndexOf(int ch)

La deuxième syntaxe renvoie la position de la dernière occurrence de ch dans l’objet String, à partir de la position fromIndex :

public int lastIndexOf(int ch, int fromIndex)

La troisième syntaxe renvoie la position de la dernière occurrence de la sous-chaîne str dans l’objet String :

public int lastIndexOf(String str)

Enfin, la quatrième syntaxe renvoie la position de la dernière occurrence de la sous-chaîne str dans l’objet String, à partir de la position fromIndex :

public int lastIndexOf(String str, int fromIndex)

Exemple :

public class Test {
  public static void main (String args[]) throws java.io.IOException {
    System.out.println("Entrez une chaîne : ");
    String S = Lit();
    System.out.println("Entrez un caractère : ");
    char Ch = (char) System.in.read();
    int Position = S.lastIndexOf(Ch);
    if (Position == -1)
      System.out.println("Le caractère ne fait pas partie de la chaîne.");
    else
      System.out.println("Le dernier caractère " + Ch + " se trouve en position " + Position);
  }
  public static String Lit() throws java.io.IOException {
    String S = "";
    char C;
    while ((C=(char)System.in.read()) != '\r') {
      S = S + C;
    }
    C=(char)System.in.read();
    return S;
  }
}

Après avoir saisi une chaîne de caractères :

System.out.println("Entrez une chaîne : ");
String S = Lit();

Et un caractère unique :

System.out.println("Entrez un caractère : ");
char Ch = (char) System.in.read();

le programme recherche la dernière position du caractère dans la chaîne à l’aide de la méthode lastIndexOf(). Le résultat est stocké dans la variable int Resultat :

int Position = S.lastIndexOf(Ch);

Le message qui en découle est fonction de la valeur de Resultat. Si Resultat vaut -1, le caractère n’a pas été trouvé :

if (Position == -1)
  System.out.println("Le caractère ne fait pas partie de la chaîne.");

Dans le cas contraire, la position de sa dernière occurrence est affichée :

else
  System.out.println("Le dernier caractère " + Ch + " se trouve en position " + Position);

length()

La méthode length() renvoie sous la forme d’un int la longueur de la chaîne sur laquelle elle est appliquée :

public int length()

regionMatches()

La méthode regionMatches() détermine si deux portions de chaînes sont identiques. Dans l’affirmative, elle renvoie la valeur true. Cette méthode admet deux syntaxes :

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

Dans la première syntaxe :

  • toffset représente la position du premier caractère à comparer dans le premier objet String (en préfixe).
  • other représente le deuxième objet chaîne à comparer.
  • oofset représente la position du premier caractère à comparer dans le deuxième objet chaîne.
  • len est le nombre de caractères consécutifs à comparer.

La deuxième syntaxe se différencie de la première par la présence du paramètre booléen ignoreCase. Si ce paramètre vaut true, les minuscules et les majuscules sont confondues dans la comparaison.

Exemple :

public class Test {
  public static void main (String args[]) throws java.io.IOException
  {
    String S1 = "Ceci EST une Chaîne";
    String S2 = "Ceci est une autre chaîne";
    System.out.println("S1 = " + S1);
    System.out.println("S2 = " + S2);
    System.out.println("Comparaison des 11 premiers caractères de S1 et S2 (ignoreCase = true) : " + S1.regionMatches(true, 0, S2, 0, 11) );
    System.out.println("Comparaison des caractères 5 à 7 de S1 et S2 (ignoreCase = false) : " + S1.regionMatches(false, 5, S2, 5, 3) );
    System.out.println("Comparaison caractères 13 à 16 de S1 et S2 (ignoreCase non utilisé) : " + S1.regionMatches(13, S2, 13, 4) );
  }
}

Ce programme donne trois exemples d’utilisation de la méthode regionMatches() et montre l’influence du paramètre ignoreCase.

La première comparaison porte sur les 11 premiers caractères des chaînes S1 et S2. Le paramètre ignoreCase étant initialisé à true, les deux sous-chaînes sont considérées comme égales :

"Ceci EST un" = "Ceci est un"

La deuxième comparaison porte sur le mot « EST » qui occupe les positions 5 à 7 dans les deux chaînes. Le paramètre ignoreCase étant initialisé à false, les deux sous-chaînes sont considérées comme différentes :

"EST" <> "est"

Enfin, la troisième instruction compare des chaînes manifestement différentes :

"Chaî" <> "autr"

Voici le résultat :
 

 
replace()

La méthode replace() effectue un remplacement systématique de tous les caractères identiques au premier paramètre par le second paramètre :

public String replace(char oldChar, char newChar)

Exemple :

public class Test {
  public static void main (String args[]) throws java.io.IOException
  {
    String S = "Ceci est une Chaîne";
    System.out.println("La chaîne S avant remplacement : " + S);
    S = S.replace('e','E');
    System.out.println("La chaîne S après remplacement : " + S);
  }
}

Le premier bloc d’instructions définit l’objet String S et l’affiche :

String S = "Ceci est une Chaîne";
System.out.println("La chaîne S avant remplacement : " + S);

Le deuxième bloc d’instructions remplace tous les « e » par des « E » dans l’objet S et affiche le résultat :

S = S.replace('e','E');
System.out.println("La chaîne S après remplacement : " + S);

Voici le résultat :
 

 
startsWith()

La méthode starsWith() renvoie la valeur booléenne true si la chaîne commence par le premier argument et une valeur false dans le cas contraire. Cette méthode admet deux syntaxes. Dans la deuxième, on précise la position du début de la comparaison :

public boolean startsWith(String preffix)
public boolean startsWith(String preffix, int toffset)

substring()

La méthode substring() permet d’extraire une sous-chaîne de la chaîne spécifiée en préfixe. Elle admet deux syntaxes.

Dans la première syntaxe, la sous-chaîne s’étend de la position beginIndex jusqu’à la fin de la chaîne :

public String substring(int beginIndex)

Dans la deuxième syntaxe, la sous-chaîne s’étend de la position beginIndex jusqu’à la position endIndex-1 :

public String substring(int beginIndex, int endIndex)

toCharArray()

La méthode toCharArray() convertit un objet String en un tableau de caractères :

public char[] toCharArray()

Exemple :

La première instruction définit et initialise un objet String. La deuxième le stocke dans le tableau de caractères ch :

String S = "Ceci est un objet String";
char ch [] = S.toCharArray();

toLowerCase()

La méthode toLowerCase() transforme en minuscules le contenu de l’objet String sur lequel elle est appliquée :

public String toLowerCase()

toUpperCase()

La méthode toUpperCase() transforme en majuscules le contenu de l’objet String sur lequel elle est appliquée :

public String toUpperCase()

trim()

La méthode trim() supprime les espaces de début et de fin de l’objet String qui lui est passé :

public String trim()

valueOf()

La méthode valueOf() convertit un booléen, un char, un tableau de char (entier ou une portion), un int, un long, un float ou un double en un objet String :

public static String valueOf(boolean b)
public static String valueOf(char c)
public static String valueOf(char data[])
public static String valueOf(char data[], int offset, int count)
public static String valueOf(int i)
public static String valueOf(long l)
public static String valueOf(float f)
public static String valueOf(double d)
Vous avez aimé cet article ? Partagez-le avec vos réseaux...
 
Comments

No comments yet.

Leave a Reply