Philippe Gandy - 22 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc
La Classe String et ses méthodes Demo de la classe String Demo du concept orienté objet Demo affichage de nombres décimaux
Cette classe, la classe String n'est pas un type élémentaire du langage, comme les types byte, short, int, long, float, double, char et boolean mais bel et bien un type abstrait. Pour plus de détails, voir la documentation officielle de la classe StringString
Déclaration est initialisation simultanée d'une variable de type String String ch1 = ""; String ch2 = "Ceci est une chaîne"; String ch3 = new String( "Ceci est une autre chaîne" ); String ch4 = ch3; Il est à noter que la chaîne ch1 existe même si elle contient une chaîne vide. La chaîne ch3 est initialisée avec une méthode qui est équivalente à la méthode avec laquelle la variable ch2 est initialisée.
Concaténation L'opérateur d'addition (+) placé entre un objet de type String et un autre objet de type String ou un élément d'un autre type devient un opérateur de concaténation. String ch1 = "Allo"; String ch2 = "Salut" + ch1; System.out.println( ch2 ); //affiche SalutAllo String ch3 = "Résultat: "; int n = 125; String ch4 = ch3 + n; System.out.println( ch4 ); //affiche Résultat:125
Il faut faire attention que l'opérateur de concaténation est évalué de gauche à droite ainsi, String ch1 = "Résultat:"; int n1 = 5; int n2 = 4; System.out.println( ch1 + n1 + n2 ); //affiche Résultat:54 alors que System.out.println( ch1 + (n1 + n2) ); //affiche Résultat:9 puisque dans ce cas, le contenu des parenthèses est évalué avant.
Il est possible de déterminer la longueur, c'est-à-dire le nombre de caractères, que contient une chaîne, en utilisant la méthode length de la classe String. String ch1 = "Java est facile"; System.out.println( ch1.length() ); //affiche 15 Il est à noter que les séquences d'échappement (\n, \t, \r) ne comptent que pour un seul caractère. String ch1 = "Allo\nAllo"; System.out.println( ch1.length() ); //affiche 9 String ch2 = "\"Yo\""; System.out.println( ch2 + " : " + ch2.length() ); //Affiche "Yo" : 4
Les éléments d'information de type String étant des objets, il n'est pas possible de vérifier si deux chaînes de caractères sont identiques en utilisant l'opérateur de comparaison (==) comme on le fait avec des éléments de types fondamentaux. Pour vérifier que deux chaînes contiennent les mêmes caractères on doit utiliser la méthode equals ou la méthodeequalsIgnoreCase,
if( chaine.equals( autreChaine ) ) { //Ce code est exécuté si les deux chaînes sont identiques, incluant la casse. } if( chaine.equalsIgnoreCase( "Oui" ) ) { //Ce code est exécuté si la chaîne contient les mots Oui, OUI, OuI //ou toute autre variation du mot oui, sans égard à la casse. }
Il est possible d'accéder aux caractères individuels d'un objet de type String par le bias de la méthode charAt. Cette méthode doit être appelée par un objet de type String et recevoir en paramètre l'indice du caractère désiré. Il faut faire attention que les chaînes de caractère en Java sont indicées à partir de 0 ainsi, le premier caractère est à la position 0 dans la chaîne.
String chaine = "Java est facile!"; System.out.println( chaine.charAt( 0 ) ); //affiche J System.out.println( chaine.charAt( 2 ) ); //affiche v System.out.println( chaine.charAt( chaine.length() - 1 ) ); //affiche !
Il est possible de modifier la casse des caractères d'une chaîne et utilisant les méthodes toUpperCase et toLowerCase de la classe String. Il est à noter que la classe String étant immuable, l'utilisation d'une telle méthode n'a aucun effet sur l'objet appelant, ainsi, chaine.toUpperCase(); n'a aucun effet sur la chaîne de caractères puisque la méthode toUpperCase ne modifie en rien l'objet appelant mais renvoie plutôt une nouvelle chaîne contenant les mêmes caractères mais cette fois, toute en majuscules. Si on veut changer réellement l'objet appelant, il faut faire, chaine = chaine.toUpperCase();
String ch = "JAVA est facile."; System.out.println( ch.toLowerCase() ); //affiche java est facile. System.out.println( ch ); //affiche JAVA est facile. ch = ch.toUpperCase(); System.out.println( ch ); //affiche JAVA EST FACILE.
On peut déterminer la position d'un caractère ou d'une sous-chaîne dans une chaîne de caractères en ayant recours à la méthode indexOf. Cette dernière revoie l'indice de la première occurence de la chaîne ou du caractère reçu en paramètre. Si la chaîne ou le caractère reçu en paramètre ne se trouve pas dans la chaîne appelante, la méthode renvoie la valeur -1.
String chaine = "Bonjour la police"; int n1 = chaine.indexOf( 'j' ); int n2 = chaine.indexOf( "police" ); int n3 = chaine.indexOf( 'Yo' ); System.out.println( n1 + " : " + n2 + " : " + n3 ); //affiche 3 : 11 : -1
Il est aussi possible de composer les méthodes et faire comme ceci, int n4 = chaine.toLowerCase().indexOf( "bonjour" ); //affiche 0 Il est possible de simplement déterminer si une sous-chaîne est présente ou non dans un chaîne en utilisant la méthodecontains. if( chaine.toLowerCase().contains( "police" ) ) { System.out.println( "La chaîne contient le mot police, sans égard à la casse." ); }
Les méthodes replace permettent de remplacer toutes les occurences d'un caractère par un autre ou toutes les occurences d'une chaîne par une autre. String chaine = "Éléphant"; chaine = chaine.replace( 'é', 'e' ); System.out.println( chaine ); //affiche Élephant chaine.replace( "phant", "cteur" ); System.out.println( chaine ); //affiche Électeur chaine.replace( "e", "" ); System.out.println( chaine ); //affiche Élctur
Les méthodes startsWith et endsWith servent à déterminer si une chaîne de caractères commence ou se termine par une sous-chaîne donnée. String chaine = JOptionPane.showInputDialog( "Voulez- vous continuer" ); if( chaine.toLowerCase().startsWith ( "o" ) ) { //Passe ici si l'utilisateur a entré quoi que ce soit qui commence par o ou O. } String nomFichier = JOptionPane.showInputDialog( "Nom du fichier:" ); if( nomFichier.toLowerCase().endsWith( ".png" ) ) { //Passe ici si le fichier a une extension.png. }
On peut extraire une sous-chaîne d'une chaîne à partir des deux versions de la méthode substring de la classe String. String chaine = "Bonjour la police"; String ch1 = chaine.substring( 8 ); //à partir de l'indice 8 String ch2 = chaine.substring( 8,10 ); //à partir de l'indice 8 jusqu'à l'indice 9 System.out.println( ">" + ch1 + " la police " + ch2 + " la< Il est à remarque que la version de substring qui reçoit 2 paramètres considère le premier paramètre comme indice inclusif et le second comme un indice exclus. Dans l'exemple précédent, pour la sous-chaîne ch2 le caractère à la position 8 est inclu dans la sous-chaîne extraite mais pas le caractère à la positions 10.
Il est à noter que si un des indices est incorrect, la machine virtuelle lancera une exception de type StringIndexOutOfBoundsException. String chaine = "Java est facile"; String ch3 = chaine.substring( 8, 3 ); //StringIndexOutOfBoundsException String ch4 = chaine.substring( 20 ); //StringIndexOutOfBoundsException