A savoir : String est *immutable** ou immuable ?
Immuable veut dire qu’une chose ne peut pas être modifiée ou altérée. Immutable concerne les objets qui ne peuvent pas être modifiés après leur création
Les objets de type String sont immuables, donc, une fois créés, vous ne pouvez plus les modifier.
String
En informatique, en tous les cas en POO, les objets immuables sont considérés comme étant plus sûrs et plus fiables (vous ne pouvez pas les modifier ni par erreur ni volontairement.
L’utilisation des Strings est fondamentale en informatique. Le langage Java a créé quelques fonctionnalités spécifiques pour la classe String :
L’instanciation est automatique (pas forcément besoin d’utiliser le mot clé new())
String maChaine = new String("maChaine est un objet");
String maChaine = "MaChaine est considérée comme un objet avec cette écriture"; String s = " Hello ";
String chaîneUn = “ Bernard ”; String chaîneDeux = “ Martin ”; String s3 = chaîneUn + “ “ + chaîneDeux;
La classe String donne des méthodes pour comparer 2 chaînes :
Ces 3 méthodes permettent de comparer le contenu d’un String avec le contenu d’un autre String.
Les Objets String ne sont pas modifiables !
Voici une illustration :
Etape 1 : on écrit s1 = new String(“Bonjour”); Etape 2 : on écrit s1 = new String(“Au revoir”); Etape 3 : on écrit s2 = new String(“Au revoir”); Etape 4 : on utilise la fonction de comparaison de Chaînes : s1.equals(s2)
Que se passe t-il ?
Lors de l’étape 2, s1 pointe vers l’objet String Au revoir, tandis que l’objet String Bonjour auparavant référencé est candidat à la poubelle (garbage Collector).
Donc, maintenant, S1 pointe vers Au revoir. Lors de l’étape 4, la fonction de comparaison retournera VRAI car s1 et s2 pointent vers des chaînes identiques.
Attention au piège de la comparaison directe !
boolean chainesIdentiques = false; String s1 = " Texte "; String s2 = " Texte "; if (s1 == s2) { chainesIdentiques = true; } System.out.println("résultat = "+chainesIdentiques);
Selon vous, que donne ce code comme résultat ?
Elle renvoie true car les valeurs de s1 et s2 sont identiques. Lors des versions antérieures de Java, la comparaison renvoyait false. Le double égal == fonctionne et permet d’obtenir une comparaison comme avec la méthode equals qui est conseillée. Souvent, un éditeur comme Eclipse vous affiche le message ci-dessous :
Use the “equals” method if value comparison was intended.
La méthode split() prend en entrée une expression régulière. Elle divise la chaîne selon l’expression régulière donnée et elle retourne un tableau qui contient des sous-chaînes. Si l’expression ne correspond pas à la chaîne recherchée le tableau résultant n’a qu’un seul élément.
Exemple sur la chaîne suivante : “Je;suis;un;apprenant;laposte”
On voit que chaque mot est séparé par un point virgule ;
Avec la méthode split, voici comment explorer la chaîne.
On doit écrire split(“\\;”)
On a dit que la méthode split() prend les expressions régulières en entrée. Ici, elle récupère les mots séparés par un point virgule.
package analyse; public class SplitChaine { public static void main(String[] args) {String maChaine = "Je;suis;un.e;apprenant.e;en;développement"; String[] tableau = maChaine.split("\\;"); int nombreDeMots= tableau.length; System.out.println("nombre de mots : "+nombreDeMots); for (String string : tableau) { System.out.println(string); } } }
Voici le résultat que vous devez obtenir dans votre console :
nombre de mots : 6 Je suis un.e apprenant.e en développement
String[] strings = {"started", "starting", "ended", "ending"}; // on teste for (String string : strings) { if (string.startsWith("st")) System.out.printf("\"%s\" commence avec \"st\"%n", string); } System.out.println(); // teste methode startsWith starting à la position 2 dans la chaine for (String string : strings) { if (string.startsWith("art", 2) ) System.out.printf("\"%s\" commence avec \"art\" à la position 2%n", string); } System.out.println(); // test method endsWith for (String string : strings) { if ( string.endsWith("ed")) System.out.printf("\"%s\" se termine par \"ed\"%n", string); }
String letters = "abcdefghijklmabcdefghijklm"; // test indexOf to locate a character in a string System.out.printf("'c' is located at index %d%n",letters.indexOf('c') ); System.out.printf("'a' is located at index %d%n",letters.indexOf('a', 1) ); System.out.printf("'$' is located at index %d%n%n", letters.indexOf('$')); // test lastIndexOf to find a character in a string System.out.printf("Last 'c' is located at index %d%n", letters.indexOf("def") ); System.out.printf("Last 'a' is located at index %d%n", letters.indexOf("def", 7)); System.out.printf("Last '$' is located at index %d%n%n",letters.indexOf("hello") ); // test indexOf to locate a substring in a string System.out.printf("\"def\" is located at index %d%n",letters.lastIndexOf("def") ); System.out.printf("\"def\" is located at index %d%n",letters.lastIndexOf("def", 25) ); System.out.printf("\"hello\" is located at index %d%n%n", letters.lastIndexOf("hello"));
String letters2 = "abcdefghijklmabcdefghijklm"; // teste substring methodes System.out.printf("Substring from index 20 to end is \"%s\"%n",letters2.substring(20)); System.out.printf("%s \"%s\"%n", "Substring from index 3 up to, but not including 6 is",letters2.substring(3, 6));
String ss1 = "Bon "; String ss2 = "Anniversaire"; System.out.printf("s1 = %s%ns2 = %s%n%n",ss1, ss2); System.out.printf("Resultat de s1.concat(ss2) = %s%n",ss1.concat(ss2) ); System.out.printf("s1 après concaténation = %s%n", ss1);
StringBuilder buffer1 = new StringBuilder(); StringBuilder buffer2 = new StringBuilder(10); StringBuilder buffer3 = new StringBuilder("hello"); System.out.printf("buffer1 = \"%s\"%n", buffer1); System.out.printf("buffer2 = \"%s\"%n", buffer2); System.out.printf("buffer3 = \"%s\"%n", buffer3); // il existe aussi la méthode reverse() pour cette classe.
documentation officielle java
Toujours les bases de java avec JMDoudoux
La méthode printf() est utilisée pour afficher un format spécifique de chaîne de caractères. Elle est similaire à la méthode println(), mais elle permet d’utiliser des spécificateurs de format pour contrôler la façon dont les valeurs sont imprimées.
Syntaxe :
System.out.printf(format, arguments);
Les spécificateurs de format les plus couramment utilisés sont :
Exemple :
int age = 35; double taille = 1.65; String prenom = "Philippe"; System.out.printf("Je m'appelle %s, j'ai %d ans et je mesure %f mètres", prenom, age, taille);
Ce qui va afficher :
Je m'appelle Philippe, j'ai 35 ans et je mesure 1.65 mètres.
Vous spécifier un certain nombre de caractères pour formater les nombres (en utilisant %x.yf, ou x est la partie entière et y la partie décimale.
Les autres formatages possibles :
Il est également possible de spécifier des options de formatage comme la largeur de champ ou le nombre de chiffres après la virgule.
Pour formater les dates :
System.out.printf("Total is: $%,.2f%n", dblTotal); System.out.printf("Total: %-10.2f: ", dblTotal); System.out.printf("% 4d", intValue); System.out.printf("%20.10s\n", stringVal); String s = "Hello World"; System.out.printf("The String object %s is at hash code %h%n", s, s) Date date = new Date(); System.out.printf("La date est : %td/%tm/%tY", date, date, date); // pas jolie // on peut simplifier en précisant que seul l'objet date est utilisé pour les 3 affichages Date date = new Date(); System.out.printf("La date est : %1$td/%1$tm/%1$tY", date); // mieux SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); String strDate = formatter.format(date); System.out.println("La date est : " + strDate);
Faites votre expérience et allez consulter la documentation Java !