Vous êtes sur la page 1sur 39

Chapitre 1:

Classe String
4IIR

Introduction
• String = une séquence de caractères.
• Java implémente les chaines de caractères comme des objets de type
String.
• L'implémentation des Strings sous forme d'objets permet à Java de
fournir un ensemble complet de fonctionnalités qui rendent la
manipulation des Strings plus pratique.
• Les objets String peuvent être construits de différentes manières..

EMSI-Java 2
4IIR

Introduction
• Java dispose de méthodes pour :
❑comparer deux chaînes de caractères,
❑rechercher une sous-chaîne,
❑concaténer deux chaînes et
❑changer la casse des lettres dans une chaîne.

EMSI-Java 3
4IIR

String est objet immutable


• Un objet String = une chaîne qui ne peut pas être modifiée.
• Une fois qu'un objet String a été créé, vous ne pouvez pas modifier les
caractères qui composent cette chaîne.
• À chaque fois que vous avez besoin d'une version modifiée d'une chaîne
existante, un nouvel objet String est créé qui contient les modifications.
• La chaîne originale reste inchangée.
• les Strings sont fixes et immuables.
• Pour les chaînes modifiables, Java propose deux solutions: StringBuffer et
StringBuilder. Tous deux contiennent des chaînes de caractères qui peuvent
être modifiées après leur création.
EMSI-Java 4
4IIR

String, StringBuffer et StringBuilder


• Les classes String, StringBuffer et StringBuilder sont définies dans
java.lang.
• Elles sont tous déclarées Final.
• Elles implémentent l'interface CharSequence.

EMSI-Java 5
4IIR

Constructeurs de la classe String


1-Pour créer une String vide, appelez le constructeur sans paramètres:
String()
String chaine = new String(); // String()
2-Pour créer une chaîne de caractères initialisée par un tableau de
caractères, utilisez : String(char chars[ ]);
char[] tableChar1= {'m','o','n'};
String chaine1 = new String(tableChar1); // mon

EMSI-Java 6
4IIR

Constructeurs de la classe String


3-Pour spécifier une partie d'un tableau de caractères comme initialisateur,
utilisez : String(char chars[ ], int startIndex, int numChars)
char[] tableChar2= {'a','z','e','r','t','y'};
String chaine2 = new String(tableChar2,1,3); // zer
4- Pour construire un objet String qui contient la même séquence de
caractères d'un autre objet String, utilisez : String(String strObj)
char[] tableChar3= {'m','o','n','d','e'};
String chaine3 = new String(tableChar3); // monde
chaine = new String(chaine3); // monde

EMSI-Java 7
4IIR

Constructeurs de la classe String


5-la classe String fournit des constructeurs qui initialisent une chaîne de
caractères lorsqu'on lui donne un tableau de byte. Voici 2 formes :
String(byte chrs[ ]) et String(byte chrs[ ], int startIndex, int numChars)
byte[] codeAscii = {97,98,99,100,101,102,103};
String chaine4 = new String(codeAscii); //
abcdefg
String chaine5 = new String(codeAscii,2,4);
//cdefg

EMSI-Java 8
4IIR

Opérations sur les Strings


• La création de nouvelles objets de Strings à partir des chaînes de
caractères;
• La concaténation de plusieurs objets de Strings à l'aide de l'opérateur +;
• La conversion d'autres types de données en des Strings

EMSI-Java 9
4IIR

Lenght()
• La méthode int lenght() renvoie le nombre de caractères d’une chaine
de caractères.
char[] tableChars = {'i','n','g','é','n','i','e','u','r'};
String chaine1 = new String(tableChars);
System.out.println(chaine1); //ingénieur
String chaine2 = "ingénieur";
System.out.println(chaine2); //ingénieur
System.out.println(chaine2.length()); // 9

EMSI-Java 10
4IIR

Concatenation des Strings


• L'opérateur + concatène deux chaînes de caractères, produisant ainsi
un objet String.
• L'opérateur + concatène aussi des Strings avec d'autres types de
données .
String chaine ="concatener" + " des "+ "chaines"+ " de caractères";
int num= 45;
String chaine2 = "Le numéro : "+ num; // chaine2 = Le numéro 45
String chaine3 = "Le numéro : " + 4+5; // chaine3 = Le numéro 45
String chaine4 = "Le numéro : " + (4+5); // chaine4 = Le numéro 9

EMSI-Java 11
4IIR

Conversion des chaînes de caractères


• Pour convertir des objets sous forme de chaîne de caractères, utilisez
valueOf( );
• valueOf( ) est surchargée pour tous les types primitifs et pour le type
Object.
• Pour les types primitifs, valueOf( ) renvoie une chaîne qui contient
l'équivalent de la valeur avec laquelle elle est appelée.
• Pour les objets, valueOf( ) appelle la méthode toString( ) sur l'objet.

EMSI-Java 12
4IIR

ValueOf()
int i =5;
String s =String.valueOf(i);
System.out.println(s); // 5

boolean b =false;
s=String.valueOf(b);
System.out.println(s); // false

char c ='k';
s=String.valueOf(c);
System.out.println(c); // k

EMSI-Java 13
ValueOf()
public class Livre {
private String titre;
private String auteur;
private int nbPage;
public Livre(String titre, String auteur, int nbPage) {
this.titre = titre;
this.auteur = auteur;
this.nbPage = nbPage;
}
public String toString() {
return "Livre : titre=" + titre + ", auteur=" + auteur + ", nbPage=" + nbPage ;
}
public static void main(String[] args) {
Livre livre = new Livre("Le seigneur des anneaux","John Ronald Reuel Tolkien",150);
String s =String.valueOf(livre);
System.out.println(s);
// Livre : titre=Le seigneur des anneaux, auteur=John Ronald Reuel Tolkien, nbPage=150
}
} EMSI-Java 14
Extraction de caractères
• String propose plusieurs façons d'extraire des caractères d'un objet
String :
❑charAt( )
❑getChars( )
❑getBytes( )
❑toCharArray( )
❑char[ ] toCharArray( )

EMSI-Java 15
4IIR

char charAt(int i)
• Pour extraire un seul caractère d'une chaîne de caractères, vous pouvez
vous référer directement à un caractère individuel via la méthode charAt( ).
• Elle a cette forme : char charAt(int i)
• Ici, i est l'index du caractère que vous voulez obtenir.
• La valeur de i doit être non négative et indiquer un emplacement dans la
chaîne de caractères.

char ch;
ch = "monde".charAt(1);//o

EMSI-Java 16
4IIR

getChars( )
• Pour extraire plus d'un caractère à la fois, utilisez la méthode getChars( ).
Elle a cette forme : void getChars(int sourceStart, int sourceEnd, char
target[ ], int targetStart)
• sourceStart spécifie l'index du début de la sous-chaîne,
• sourceEnd spécifie un index qui est un peu plus loin que la fin de la sous-
chaîne souhaitée.
• Le tableau qui recevra les caractères est spécifié par target.
• L'index dans target auquel la sous-chaîne sera copiée est passé dans
targetStart.
• Il faut veiller à ce que le tableau cible soit suffisamment grand pour
contenir le nombre de caractères de la sous-chaîne spécifiée.

EMSI-Java 17
getChars( )
String chaine = "Le programme suivant démontre getChars()";
int debut = 6 ;
int fin= 20;
char[] table = new char[fin-debut];
chaine.getChars(debut, fin, table, 0);
System.out.println(table); // gramme suivant

EMSI-Java 18
4IIR

getBytes( )
• Cette méthode stocke les caractères dans un tableau de byte.
• Elle utilise les conversions de caractères en bytes
• Sa forme est : byte[ ] getBytes( )
String chaine = "Bonjour";
byte[] tableBytes = chaine.getBytes();
for (byte b : tableBytes)
System.out.print(b+" "); // 66 111 110 106 111 117 114

EMSI-Java 19
4IIR

toCharArray( )

• Pour convertir tous les caractères d'un objet String en un tableau de


caractères, utilisez toCharArray( ).
• Elle retourne un tableau de caractères pour la chaîne entière.
• Elle a cette forme générale : char[ ] toCharArray( )
public static void main(String[] args) {
String chaine = "Bonjour";
char[] chars= chaine.toCharArray();
for (char c : chars)
System.out.print(c+" "); // B o n j o u r

EMSI-Java 20
4IIR

Comparaison des Strings


La classe String comprend un certain nombre de méthodes permettant de
comparer des chaînes, à savoir : equals( ) et equalsIgnoreCase( )
• boolean equals(String objet) :
• compare l'égalité de deux chaînes de caractères.
• Ici, str est l'objet String qui est comparé à l'objet String qui l'invoque.
• Il renvoie vrai si les chaînes contiennent les mêmes caractères dans le
même ordre, et faux sinon. La comparaison est sensible à la casse.
• boolean equalsIgnoreCase(String objet)
• effectue une comparaison qui ignore les différences de casse.
• Cette méthode considère que A-Z est identique à a-z.

EMSI-Java 21
equals et equalsIgnoreCase
String s1 = new String("Bonjour");
String s2 = new String("Bonjour");
String s3 = new String("bonjour");
String s4 = "Bonjour";
String s5 = "Bonjour";

System.out.println(s1+" == "+ s2+ " : " + (s1==s2));


//Bonjour == Bonjour : false
System.out.println(s4+" == "+ s5+ " : " + (s4==s5));
//Bonjour == Bonjour : true
System.out.println(s1+" equals "+ s2+" : "+ s1.equals(s2));
//Bonjour equals Bonjour : true
System.out.println(s1+" equals "+ s3+" : "+ s1.equals(s3));
//Bonjour equals bonjour : false
System.out.println(s1+" equalsIgnoreCase "+ s3+" : "+ s1.equalsIgnoreCase(s3));
//Bonjour equalsIgnoreCase bonjour : true
EMSI-Java 22
4IIR

regionMatches( )
• La méthode regionMatches( ) compare une région spécifique d'une chaîne avec une
autre région spécifique dans une autre chaîne.
• Elle est surchargé :
• regionMatches(int startIndex, String str2, int str2StartIndex, int
numChars)
• regionMatches(boolean ignoreCase, int startIndex, String
str2, int str2StartIndex, int numChars)
• Pour les deux versions, startIndex spécifie l'index auquel la région commence à l'intérieur
de l'objet String appelant.
• La String comparée est spécifiée par str2.
• L'index auquel la comparaison commencera dans str2 est spécifié par str2StartIndex.
• La longueur de la sous-chaîne comparée est passée dans numChars.
• Dans la deuxième version, si ignoreCase est true, la casse des caractères est ignorée.
Sinon, la casse est significative.
EMSI-Java 23
4IIR

regionMatches( )
String str1 = new String("Hello, How are you");
String str2 = new String("How");
String str3 = new String("HOW");

System.out.print("Result of Test1: ");


System.out.println(str1.regionMatches(7, str2, 0, 3));
// Result of Test1: true

System.out.print("Result of Test2: ");


System.out.println(str1.regionMatches(7, str3, 0, 3));
// Result of Test2: false

System.out.print("Result of Test3: ");


System.out.println(str1.regionMatches(true, 7, str3, 0, 3));
// Result of Test3: true

EMSI-Java 24
4IIR

startsWith( ) et endsWith( )
• booleen startsWith(String str) : détermine si une chaîne donnée
commence par une chaîne spécifiée.
• boolean endsWith(String str) : détermine si la chaîne en question
se termine par une chaîne spécifiée.
String str = "Hello";

boolean b = str.startsWith("He");
System.out.println(str + " commmence par He ? " + b );
// Hello commmence par He ? true

b = str.endsWith("lo");
System.out.println(str + " termine par lo ? " + b );
// Hello termine par lo ? true
EMSI-Java 25
4IIR

equals( ) Versus ==
• la méthode equals( ) et l'opérateur == effectuent deux opérations
différentes.
• la méthode equals( ) compare le contenu de deux chaines de
caractères.
• L'opérateur == compare deux références d'objet pour voir si elles se
réfèrent à la même instance.

EMSI-Java 26
4IIR

compareTo( )
• Souvent, il ne suffit pas de savoir si deux chaînes sont identiques.
Pour trier des Strings, il faut savoir laquelle est inférieure, égale ou
supérieure à la suivante.
• Une chaîne est inférieure à une autre si elle vient avant l'autre dans
l'ordre du dictionnaire.
• Une chaîne est plus grande qu'une autre si elle vient après l'autre
dans l'ordre du dictionnaire.
• compareTo( ) est spécifiée par l'interface Comparable<T>, que String
implémente. Elle a cette forme: int compareTo(String str)
• compareTo( ) prend en compte les lettres majuscules et minuscules.

EMSI-Java 27
4IIR

int compareToIgnoreCase(String str)


• Pour ignorer les différences de casse lors de la comparaison de deux
Strings, utilisez compareToIgnoreCase( ):
• La signature de cette méthode : int compareToIgnoreCase(String
str)
• Cette méthode renvoie les mêmes résultats que compareTo( ), sauf
que les différences de casse sont ignorées.

EMSI-Java 28
4IIR

Recherche de chaînes
• String propose deux méthodes pour rechercher une chaîne de
caractères ou une sous-chaîne de caractères donnée :
❑indexOf( ) Recherche la première occurrence d'un caractère ou
d'une sous-chaîne.
❑lastIndexOf( ) Recherche la dernière occurrence d'un caractère
ou d'une sous-chaîne de caractères.
• Ces deux méthodes sont surchargées.
• Elles renvoient l'index auquel le caractère ou la sous-chaîne a été
trouvé, ou -1 en cas d'échec.

EMSI-Java 29
4IIR

indexOf
String str1 = new String("Le programme suivant fait la démonstration de
IndexOf");
String str2 = new String("programme");
String str3 = new String("suivant");
String str4 = new String("démonstration");
System.out.println("Index de m dans str1: " + str1.indexOf('m'));
System.out.println("Index de m dans str1 après 5éme char: " +
str1.indexOf('m', 5));
System.out.println("Index de m dans str1 après 30éme char: " +
str1.indexOf('m', 30));
System.out.println("Index du string str2 dans str1: " + str1.indexOf(str2));
System.out.println("Index de str2 après 2éme char " + str1.indexOf(str2, 2));
System.out.println("Index de string str3: " + str1.indexOf(str3));
System.out.println("Index de string str4 " + str1.indexOf(str4));

EMSI-Java 30
4IIR

Modifier d'une chaîne de caractères


• Comme les objets String sont immuables, chaque fois que vous voulez
modifier une String, vous devez :
• soit la copier dans un StringBuffer ou un StringBuilder,
• soit utiliser une méthode String qui construit une nouvelle copie
de la chaîne avec vos modifications complètes.
• Les méthodes utilisées pour modifier une chaine de caractère sont :
• substring( )
• concat( )
• replace( )
• trim( ) and strip( )

EMSI-Java 31
4IIR

substring( )
• Vous pouvez extraire une sous-chaîne en utilisant substring( ).
• Elle se présente sous deux formes.
• String substring(int startIndex)
• String substring(int startIndex, int endIndex)
String str = new String("Le Tigre peut atteindre une taille de 3 mètres de long");
System.out.println("Sous-chaîne à partir de l'indice 15:");
System.out.println(str.substring(14));
System.out.println("Sous-chaîne commençant à l'indice 15 et se terminant à 20:");
System.out.println(str.substring(14, 23));

EMSI-Java 32
concat( )
• concat( ) concaténe deux chaînes de caractères
• Elle a la forme suivante : String concat(String str)
• Cette méthode crée un nouvel objet qui contient la chaîne de
caractères appelante avec le contenu de str à la fin.
String str1 = "Bonjour";
str1 = str1.concat(" tout ");
str1 = str1.concat(" le monde ");
System.out.println(str1);

String str2 = "Un";


str2 = str2.concat(" exemple").concat(" de la méthode").concat(" concat");
System.out.println(str2);

EMSI-Java 33
replace( )
• String replace (char oldChar, char newChar) : Elle remplace toutes
les occurrences d'un caractère oldChar par un caractère newChar.
• String replaceFirst(String regex, String replacement): Elle
remplace la première sous-chaîne qui correspond à l'expression
régulière spécifiée par la chaîne de remplacement.
PatternSyntaxException si l'expression régulière spécifiée (regex) n'est
pas valide.
• String replaceAll(String regex, String replacement): Elle remplace
toutes les sous-chaînes qui correspondent à l'expression régulière
donnée par la chaîne de remplacement.
EMSI-Java 34
replace( )
String str = new String("Exemple d'un texte à modifier");

System.out.print("str après le remplacement du 'e' par 'a' :" );


System.out.println(str.replace('e', 'a'));

str = new String("le site est google.com");

System.out.print("str après le remplacement du 'com' par 'org' :" );


System.out.println(str.replaceFirst("com", "org"));

System.out.print("str après le remplacement du nom du site:" );


System.out.println(str.replaceFirst("(.*)", "XYZ.com"));

EMSI-Java 35
trim( )
• La méthode trim( ) renvoie une chaîne après avoir supprimé les
espaces blancs de tête et de queue de la chaîne d'entrée.

String str = new String(" Comment allez-vous? ");


System.out.println("str avant trim: "+str);
System.out.println("str après trim: "+str.trim());

EMSI-Java 36
split( )
• La méthode split est utilisée pour diviser une chaîne de caractères en
des sous-chaînes basées sur le délimiteur donné ou l'expression
régulière.
String str = new String("28/12/2013");

System.out.println("split " + str + " à l'aide du /");


String array1[] = str.split("/");
for (String temp : array1)
System.out.println(temp);

System.out.println("\nsplit " + str + " à l'aide du / avec une limite=2");


String array2[] = str.split("/", 2);
for (String temp : array2)
System.out.println(temp); EMSI-Java 37
toLowerCase( ) et toUpperCase( )
• La méthode toLowerCase( ) convertit tous les caractères majuscules
d'une chaîne de caractères aux minuscules.
• La méthode toUpperCase( ) convertit tous les caractères minuscules
d'une chaîne de caractères en majuscules.

String original= "Un simple teste.";


System.out.println("Uppercase : " + original.toUpperCase());
System.out.println("Lowercase : " + original.toLowerCase());

EMSI-Java 38
Join
• static String join(CharSequence delim, CharSequence . . . strs)
concaténer deux ou plusieurs chaînes de caractères, en séparant
chaque chaîne par un délimiteur :

String message = String.join("-", "This", "is", "a", "String");


System.out.println(message); // This-is-a-String

EMSI-Java 39

Vous aimerez peut-être aussi