1/34 Séance 5 / 12 2/34 La classe String ●Chaîne de caractères = séquence de zé
1/34 Séance 5 / 12 2/34 La classe String ●Chaîne de caractères = séquence de zéro ou plusieurs caractères ●String = chaînes non mutables – new String("Salut") – "Salut" ●En bref : – longueur d'une chaîne : int length() – ième caractère : char charAt(int i) S a l u t 0 1 2 3 4 3/34 Unicité des littéraux String ●Un même littéral du type String représente toujours le même objet String x = "abc"; String abc x y String y = "abc"; 4/34 Égalité entre String ●Pour tester l'égalité de deux String, il faut utiliser la méthode equals String x = "abc"; String abc x String abc z String z = new String(x); x == z x.equals(z) ●Remarque – x == x.toString() dans String public String toString() { return this ; } 5/34 Expressions de type String ●On peut concaténer les chaînes avec + – "Salut " + "à tous" → "Salut à tous" – Attention : trois chaînes distinctes ! ●On peut concaténer une chaîne avec n'importe quoi : le résultat est toujours une chaîne – 1 + 1 + "b" + (1 + 1 + 1) → "2b3" – "une chaîne " + objet ●équivaut à "une chaîne " + objet.toString() 6/34 Méthode String toString() ●Présente (implicitement) dans toute classe class X { public String toString() { return this.getClass().getName() + "@" + Integer.toHexString(this.hashCode()); } } X a = new X(); System.out.println(a.toString()); X@3e25a5 nom de la classe valeur calculée à partir de l'adresse mémoire 7/34 StringBuffer abcghi x R1 x.append("ghi"); StringBuffer abc x R1 StringBuffer abcdefghi x R1 x.insert(3, "def"); StringBuffer abcghi x R1 String abcdefghi R2 x.toString() StringBuffer abcdefghi x R1 La classe StringBuffer ●Une chaîne mutable est une instance de la classe StringBuffer 8/34 Méthodes communes char charAt(int) boolean equals(Object) int indexOf(String) int lastIndexOf(String) int length() String substring(int) String substring(int, int) String toString() Particularités des StringBuffer StringBuffer append(TT) StringBuffer delete(int, int) StringBuffer deleteCharAt(int) StringBuffer insert(int, TT) StringBuffer replace(int, int, String) StringBuffer reverse() void setCharAt(int, char) void setLength(int) String concat(String) int compareTo(String) String replace(char, char) String valueOf(T) Particularités des String T ::= boolean | char | char[] | int | long | float | double | Object TT ::= T | String String / StringBuffer 9/34 La classe StringTokenizer ●java.util.StringTokenizer – pour découper une chaîne de caractères en mots – mot + séparateur + mot + séparateur + ... "Bonjour le monde !" Séparateur = ' ' "Bonjour" "le" "monde" "!" 10/34 Exemple simple StringTokenizer hachoir = new StringTokenizer("Bonjour le monde !", "n "); StringBuffer resultat = new StringBuffer(); while (hachoir.hasMoreTokens()) { String mot = hachoir.nextToken(); mot = mot.toUpperCase(); resultat.append(mot + "\n"); } StringBuffer BO JOUR LE MO DE ! resultat 11/34 Exemple Trier les mots d'une phrase (1) String data = "Belle Marquise, vos beaux yeux me font mourir d'amour !"; String result = ""; StringTokenizer st = new StringTokenizer(data, " ,!", false); String[] words = new String[st.countTokens()]; int i = 0; while (st.hasMoreTokens()) { words[i] = st.nextToken(); i += 1; } Arrays.sort(words); while (i > 0) { i -= 1; result = words[i] + " " + result; } System.out.println(result); Belle Marquise beaux d'amour font me mourir vos yeux 12/34 Exemple Trier les mots d'une phrase (2) String data = "Belle Marquise, vos beaux yeux me font mourir d'amour !"; StringBuffer result = new StringBuffer(); StringTokenizer st = new StringTokenizer(data, " ,!", false); String[] words = new String[st.countTokens()]; int i = 0; while (st.hasMoreTokens()) { words[i] = st.nextToken(); i += 1; } Arrays.sort(words, new CompareIgnoreCase()); for (int j = 0; j < i; j++) { result.append(words[j] + " "); } System.out.println(result.toString()); beaux Belle d'amour font Marquise me mourir vos yeux class CompareIgnoreCase implements java.util.Comparator { public int compare(Object o1, Object o2) { if ((o1 == null) || (o2 == null)) { throw new NullPointerException(); } String s1 = (String) o1; String s2 = (String) o2; return s1.compareToIgnoreCase(s2); } } 13/34 Les bibliothèques de fonctions ●Classes non instanciables – constructeurs déclarés private – classes déclarées final ●Tout y est déclaré static Boîtes à outils de fonctionnalités public final class MyLibrary { public static final Xxx aConstant = ...; private MyLibrary() { // rien } public static Yyy aMethod(...) { ... } } 14/34 java.lang.System ●canaux d'entrée, de sortie, et d'erreur standard – final InputStream in – final PrintStream out – final PrintStream err ●terminaison d'un programme – void exit(int) ●propriétés du système – String getProperty(String) "file.separator" → caractère de séparation des noms de répertoires pour le système de fichiers "line.separator" → séquence de caractères utilisée par l'os pour séparer les lignes d'un fichier de texte "user.dir" → répertoire de travail de l'utilisateur "user.home" → répertoire personnel de l'utilisateur "user.name" → nom du compte de l'utilisateur 15/34 final double E final double PI double abs(double) float abs(float) int abs(int) long abs(long) double max(double, double) float max(float, float) int max(int, int) long max(long, long) double min(double, double) float min(float, float) int min(int, int) long min(long, long) double acos(double) double asin(double) double atan(double) double ceil(double) double cos(double) double exp(double) double floor(double) double log(double) double pow(double) double random() double rint(double) long round(double) int round(float) double sin(double) double sqrt(double) double tan(double) double toDegrees(double) double toRadians(double) java.lang.Math 16/34 BlueJ : un EDI gratuit pour Java The copyright © for BlueJ is held by M. Kölling and J. Rosenberg 17/34 Références pour BlueJ ●Page d'accueil : http://www.bluej.org ●Téléchargement – des instructions d'installation ●http://www.bluej.org/download/install.html – du logiciel ●http://www.bluej.org/download/download.html – du tutoriel ●http://www.bluej.org/tutorial/tutorial-201.pdf – du manuel de référence ●http://www.bluej.org/doc/bluej-ref-manual.pdf 18/34 Notion de paquetage Java regroupement de classes, d'interfaces et de paquetages concourant tous à un but commun paquetages Java types Java Exemples : java java.lang java.util java.io 19/34 1 2 3 4 5 la classe Machin... ... est dans le paquetage truc ! 20/34 Utilisation des paquetages sous BlueJ ●Insertion d'une classe au sein d'un paquetage : – créer un paquetage sous BlueJ – se déplacer à l'intérieur de ce paquetage et créer la classe avec comme première ligne du fichier : ●package <nom du paquetage>; ●Utilisation d'une classe appartenant à un autre paquetage que le paquetage courant : – importer le nom complet de la classe en début de fichier (après l'éventuelle directive package) ●import <nom du paquetage>.<nom de la classe>; 21/34 Annexe Standards de codage 22/34 Fichiers ●Fichier source – nom rigoureusement identique à celui de l'élément public qu'il contient – suffixé par ".java" ●Structure d'un fichier source : – déclaration de paquetage : package ...; – déclarations d'importation : import ...; – documentation de l'élément (contenant la spécifi- cation de l'invariant) : /** ...@inv... */ – définition de l'élément : ... class ... { ... } 23/34 ●Structure du texte d'une classe : – pour chacune des sections ●d'abord les éléments statiques puis les éléments d'instance ●d'abord les éléments publics, puis protégés, puis sans modificateur d'accessibilité, et enfin privés – section // ATTRIBUTS ●déclarations commentées d'attributs – section // CONSTRUCTEURS ●définitions spécifiées de constructeurs – section // REQUETES ●définitions spécifiées de requêtes – section // COMMANDES ●définitions spécifiées de commandes – section // OUTILS ●définitions spécifiées de méthodes auxiliaires 24/34 Indentation et espacement ●Indentation = 4 espaces (ni plus, ni moins) ●Longueur max d'une ligne = 80 caractères ●Expression trop longue = coupée sur plusieurs lignes, de la manière suivante – après une virgule – avant un opérateur – pas à l'intérieur de parenthèses imbriquées – en indentant à l'identique les expressions de même niveau – 2 indentations (8 espaces) pour bien marquer la différence avec une indentation normale 25/34 ●1 espace entre un mot-clé et la parenthèse ouvrante qui le suit : while (condition) ●0 espace entre un nom de méthode et la parenthèse qui le suit : o.m(args) ●1 espace après chaque virgule dans une liste : o.m(arg1, arg2) ●Tout opérateur binaire (sauf .) doit être entouré d'espaces : x + y mais o.a ●1 espace après un opérateur de transtypage : (int) 5.2 26/34 Commentaires ●Commentaire de documentation (/** ... */) sert à spécifier un élément d'une manière indépendante de son implémentation, quel que soit le niveau de visibilité de cet élément – doit être placé juste avant l'élément – doit avoir même indentation que l'élément – peut contenir une description d'invariant (@inv) lorsque l'élément est une classe ou une interface – peut contenir une spécification de contrat (@pre, @post) lorsque l'élément est une méthode ou un constructeur 27/34 ●Commentaire simple (/* ... */) sert à décrire une portion de code – doit constituer une valeur supplémentaire en soi et permettre une meilleure compréhension du code ●Commentaire de fin de ligne (// ...) peut être utilisé comme un commentaire simple à la fin d'une (courte) ligne de code – peut aussi permettre de masquer certaines lignes de code au compilateur ●Remarques : – Ne jamais utiliser de grosse boîte délimitée par des '*' ou d'autres caractères 28/34 Déclarations ●Une seule déclaration par ligne de code ●Déclarer les tableaux au niveau du type, pas de l'entité (int[] t int t[]) ●Déclaration d'un type, d'un constructeur ou d'une méthode – accolade ouvrante placée à la fin de la ligne d'entête uploads/s3/ sa-cance-5.pdf
Documents similaires










-
29
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Dec 09, 2021
- Catégorie Creative Arts / Ar...
- Langue French
- Taille du fichier 0.3235MB