Java Chaine de Caractere
Java Chaine de Caractere
Java Chaine de Caractere
Frédéric Mallet
http://deptinfo.unice.fr/~fmallet/
2013/2014 F. Mallet - POO 1
Les chaînes de caractères
Objectifs
Les chaînes de caractères
Classe String
Relations avec les tableaux de caractères
Conversions vers les types numériques primitifs
Classes StringBuilder et StringBuffer
Concaténation : +
L’opérateur + est surchargé
"Bonjour " + "tout le monde!"
Les références
non-nulles sont traduites par l’appel de la méthode
toString()
nulles => "null"
Egalité de chaînes
Ce sont des références
Attention au ==
Utilisez plutôt la méthode equals(Object) redéfinie
depuis la classe Object
• String s1 = "Bonjour ";
• String s2 = "tout le monde";
• (s1+s2).equals("Bonjour tout le monde");
Utiliser aussi equalsIgnoreCase() pour la casse !
Comparaison de chaînes
String réalise l’interface Comparable<String>
Méthode compareTo(String s) : int
• Implante l’ordre lexicographique sur les chaînes de caractères
– "antoine".compareTo("antonin") <0
– Mais "antoine".compareTo("Antonin") >0
Recherche
Chercher dans une chaîne
int indexOf(char c)
• Cherche la première position du caractère c
• Ex: "bonjour".indexOf('o') => 1, "bonjour".indexOf('O') => -1
int indexOf(char c, int pos)
• Cherche la première position du caractère c à partir de pos.
int lastIndexOf(char c), int lastIndexOf(char c, int pos)
• Dernière position du caractère c
• Ex: "bonjour".lastIndexOf('o') => 4
Sous-chaînes
Deux méthodes
substring(int debut, int fin) et substring(int debut)
sous-chaîne entre la position debut inclue et la position
fin exclue
• "bonjour".substring(3, 7); renvoie la chaîne "jour"
• "bonjour".substring(3); renvoie aussi la chaîne "jour"
Inclusion de chaînes
Premier emplacement d’une sous-chaîne
int indexOf(String sousChaine)
int indexOf(String sousChaine, int position)
Début et fin
boolean endsWith(String sousChaine)
boolean startsWith(String sousChaine)
Majuscules et minuscules
De minuscules vers majuscules: toUpperCase()
String s1 = "Bonjour";
String s2 = s1.toUpperCase();
s2 devient "BONJOUR", s1 n’est pas modifiée
Chaînes et tableaux
Il est souvent commode de travailler sur les tableaux
de caractères
Exemple: Remplacer le ième caractère d’une chaîne par une
majuscule
String enMaj(String s, int i) {
String debut = s.substring(0, i);
char c = s.charAt(i);
String fin = s.substring(i+1);
return debut + Character.toUpperCase(c) + fin;
}
NumberFormatException
On peut attraper les exceptions pour détecter une
erreur
class Somme {
static public void main(String[] args) {
int somme = 0;
for(String arg : args)
somme += Integer.parseInt(arg);
System.out.prinln(somme);
}
}
Test :
java Somme 12 25 14 => 51
java Somme 12 pasUnNombre 14 =>
NumberFormatException !
NumberFormatException: try/catch
On peut attraper les exceptions pour détecter une erreur
class Somme {
static public void main(String[] args) {
int somme = 0;
for(String arg : args){
try {
somme += Integer.parseInt(arg);
} catch (NumberFormatException nfe) {
System.err.println(arg+" n’est pas un nombre!");
}
}
System.out.println(somme);
}
}
Test :
java Somme 12 pasUnNombre 14 => 26
pasUnNombre n’est pas un nombre!
Objectifs
Les chaînes de caractères
Classe String
Relations avec les tableaux de caractères
Classes StringBuilder et StringBuffer
Problème de performances
String est une classe immutable
Ses objets ne sont pas modifiables
Chaque opération implique la création d’un nouvel objet (coûteux en
temps et en mémoire)
Création d’une chaîne de longueur n avec +
9000
8000
7000
6000
5000
4000 Opérateur + (ms)
3000
StringBuilder (ms)
2000
1000
0
N - Longueur des chaînes
(en caractères)
2013/2014 F. Mallet - POO 20
Les chaînes de caractères
StringBuilder et StringBuffer
Opérations
Concaténation
• append(X), append(char[])
Insertion
• insert(int index, X caractères)
Remplacement
• replace(int début, int fin, String chaîne)
Effacement
• delete(int début, int fin), deleteCharAt(int index)
Vers les chaînes
• toString() : String, substring(int début, int fin)
StringBuilder
Introduite avec Java 5.0
Pas Thread-safe
Performances légèrement meilleures
Interface CharSequence
Suite de char lisible (JDK 1.4)
String, StringBuilder et StringBuffer réalisent cette
interface
Interface utile pour les expressions régulières
notamment
interface CharSequence {
char charAt(int index);
int length();
CharSequence subSequence(int start, int end);
String toString();
}