A) Classes associées aux types primitifs Avec un type primitif, on n'a pas d'objets ni de méthodes. Grâce aux classes associées (Integer vs int, Double vs double, …), nous pouvons profiter des champs, des méthodes implémentés dans ces classes. On se limite aux deux classes Integer et Double. 1) Classe Integer associée au type int // Entier le public final // Entier le public final plus grand: static int MAX_VALUE; plus petit: static int MIN_VALUE; exemple : // déterminer l'âge le plus jeune: int mini = Integer.MAX_VALUE; for( int i = 0 ; i < age.length ; i++) if ( age[i] < mini) mini = age[i]; /* constructeurs : */ public Integer(int valeur); public Integer(String s); exemples : Integer K = new Integer(23); Integer Z = new Integer("2345"); /* quelques méthodes : */ public int intValue(); public static int parseInt(String s); public static Integer valueOf(String s); exemples (voir aussi les constructeurs): K.intValue() retourne l'entier 23 (de type int) Integer.parseInt("432") retourne l'entier 432 Integer.valueOf("5678") retourne un objet de la classe Integer dont la valeur "associée" est 5678. Autres exemples : prochaines pages. IFT 1170, automne 2006 (par Le Van N.) Chapitre 3 : quelques classes prédéfinies 46 2) Classe Double associée au type double // Réel le plus grand: public final static double MAX_VALUE; // Réel le plus petit: public final static double MIN_VALUE; exemple : // déterminer la taille la plus grande: int maxi = Double.MIN_VALUE; for( int i = 0 ; i < taille.length ; i++) if ( taille[i] > maxi) maxi = taille [i]; /* constructeurs : */ public Double(double valeur); public Double(String s); exemples : Double K = new Double(1.72)); Double Z = new Double("67.8"); 67.8 1.72 K Z /* quelques méthodes : */ public double doubleValue(); public static Double valueOf(String s); Autres exemples : prochaines pages. IFT 1170, automne 2006 (par Le Van N.) Chapitre 3 : quelques classes prédéfinies 47 B) Classe String (chaînes de caractères) Déclarer et initialiser: String souhait = "Bonne soirée" ; String nomPre = new String("Tremblay Pierre"); "Bonne soirée" Souhait "Tremblay Pierre" nomPre Quelques méthodes de la classe String : 1. la longueur (le nombre de caractères) : public int length() exemples : souhait.length() vaut 12 "A BC".length() vaut 4 2. accès à un caractère à un indice donné public char charAt(int index) exemples : souhait.charAt(0) vaut la lettre 'B' "Bonsoir".charAt(3) vaut la lettre 's' 3. conversion : public String toLowerCase() // en minuscules public String toUpperCase() // en majuscules exemples : String nom1 = "Lafleur" ; String nom2 = nom1.toLowerCase(); nom1 reste "Lafleur" (inchangé) nom2 vaut "lafleur" String ch = "1er LanGaGe" ; String ch2 = ch.toUpperCase(); ch reste "1er LanGaGe" (inchangé) ch2 vaut "1ER LANGAGE" IFT 1170, automne 2006 (par Le Van N.) Chapitre 3 : quelques classes prédéfinies 48 4. comparaison : public boolean equals (Object unObjet) exemples : "Bon".equals("Bon") vaut true "Bon".equals("bon") vaut false public boolean equalsIgnoreCase(String autre) (sans tenir compte de la casse (Maj. vs minuscule) exemples : "Bon".equalsIgnoreCase("bon") vaut true "Bon".equals("bonsoir") vaut false public int compareTo(String autre) exemples : "Bon".compareTo("Bon") vaut 0 (identiques) "Bon".compareTo("Automne") > 0 (la chaîne "Bon" est alors plus grande que la chaîne "Automne") "Bon".compareTo("Dinde") < 0 (la chaîne "Bon" est alors plus petite que la chaîne "Dinde") 5. recherche : d'un caractère dans une chaîne : public int indexOf(char unCar) exemples : "Bonsoir".indexOf('n') vaut 2 "Bonsoir".indexOf('z') vaut –1 (non trouvé) public int lastIndexOf(char unCar) exemples : "Bonsoir".lastIndexOf('o') vaut 4 "Bonsoir".lastIndexOf('z') vaut –1 (non trouvé) d'une sous-chaîne dans une chaîne : public int indexOf(String ch) exemples : "Bonsoir".indexOf("soi"') vaut 3 "Bonsoir".indexOf("si") vaut –1 (non trouvé) public int lastIndexOf(String ch) exemples : "Bonsoir".lastIndexOf("oi") vaut 4 "Bonsoir".lastIndexOf("non") vaut –1 (non trouvé) IFT 1170, automne 2006 (par Le Van N.) Chapitre 3 : quelques classes prédéfinies 49 6. sous-chaîne: public String substring(int debut, int fin) (indice de debut: inclus, indice fin :exclu) exemples : "Bonsoir".substring(2,6) vaut "nsoi" "Bonsoir".substring(0, 3) vaut "Bon" public String substring(int debut) (à partir de l'indice de debut jusqu'à la fin) exemples : "Bonsoir".substring(2) vaut "nsoir" "Bonsoir".substring(4) vaut "oir" 7. etc . . . //Un exemple sur la classe String public class TestString { public static void main(String [] args) { // déclarer et initialiser quelques chaînes : String s1 = "bonsoir" , s2 = "bonsoir", s3 = "Bonsoir", s4 = "Tu l'as trop ecrase, Cesar, ce Port-Salut"; int i, j ; System.out.println("Les 4 chaines originales :"); System.out.println(" s1 = " + s1); System.out.println(" s2 = " + s2); System.out.println(" s3 = " + s3); System.out.println(" s4 = " + s4); // quelques méthodes fréquemment utilisées : // public int length() : longueur en nombre de caractères System.out.println(" longueur de s1 : " + s1.length()+ " caractere(s)"); IFT 1170, automne 2006 (par Le Van N.) Chapitre 3 : quelques classes prédéfinies 50 // public boolean eaquals(Object autreobjet) : objet est-il égale à 1 autre? if ( s1.equals(s2)) System.out.println(" s1 a le meme contenu que s2"); else System.out.println(" s1 n'a pas le meme contenu que s2"); System.out.println(" s1 vs s3 : " + s1.equals(s3)); // public int compareTo (String autre_chaîne) : à parler en classe System.out.println(" s1 vs s3 (encore) : " + s1.compareTo(s3)); // public boolean equalsIgnoreCase(String autre_chaine) : sans distinguer // majuscule et minuscule if ( s1.equalsIgnoreCase(s3)) System.out.println(" s1 a le meme contenu que s3 sans casse"); else System.out.println(" s1 n'a pas le meme contenu que s3 (sans casse)"); // public char charAt(indice) : le caractère qui se trouve à l'indice System.out.println("Premier caractere de " + s1 + " est : " + s1.charAt(0)); System.out.println("Dernier caractere de " + s1 + " est : " + s1.charAt(s1.length() - 1)); // exemple 1 d'utilisation de la méthode charAt System.out.print(s1 + " a l'envers est : "); for ( i = s1.length() - 1 ; i >= 0 ; i--) System.out.print(s1.charAt(i)); System.out.println(); // méthodes pour extraction de sous-chaînes : // public String substring (int indice_debut) : à partir de l'indice début System.out.println("s1.substring(3) = " + s1.substring(3)); // public String substring (int indice_debut, int indice_fin) : // à partir de l'indice début jusqu'à (l'indice_fin -1) System.out.println("s1.substring(3,5) = "+ s1.substring(3,5)); // public int indexOf(int ch) : un caractère se trouve à quel indice System.out.println("le caractere o se trouve a l'indice " + s1.indexOf('o') + " de " + s1); // public int indexOf(int ch, int a_partir_indice) : // à partir d'un indice, un caractère se trouve à quel indice IFT 1170, automne 2006 (par Le Van N.) Chapitre 3 : quelques classes prédéfinies 51 System.out.println("un autre caractere o se trouve a l'indice " + s1.indexOf('o',2) + " de " + s1); System.out.print("Apres avoir fait : s1 = s1.replace('o', 'O'); " + s1 + " devient : "); // public String replace(char ancien_car, char nouveau_car) s1 = s1.replace('o', 'O'); System.out.println(s1); // Combien de "on" dans "Bonsoir tout le monde" ? String souhaite = "Bonsoir tout le monde", ch = "on"; int n = 0, indice = 0; while ( indice >= 0 && indice < souhaite.length()) { indice = souhaite.indexOf(ch, indice); if (indice >= 0) { n++; indice++; } } System.out.println("On a " + n + " fois du mot on" + " dans " + souhaite); // il y a autres méthodes mais c'est déjà suffisant pour nous } } /* Exécution Les 4 chaines originales : s1 = bonsoir s2 = bonsoir s3 = Bonsoir s4 = Tu l'as trop ecrase, Cesar, ce Port-Salut longueur de s1 : 7 caractere(s) s1 a le meme contenu que s2 s1 vs s3 : false s1 vs s3 (encore) : 32 s1 a le meme contenu que s3 sans casse Premier caractere de bonsoir est : b Dernier caractere de bonsoir est : r bonsoir a l'envers est : riosnob s1.substring(3) = soir s1.substring(3, 2) = so le caractere o se trouve a l'indice 1 de bonsoir un autre caractere o se trouve a l'indice 4 de bonsoir Apres avoir fait : s1 = s1.replace('o', 'O'); bonsoir devient : bOnsOir On a 2 fois du mot on dans Bonsoir tout le monde */ IFT 1170, automne 2006 (par Le Van N.) Chapitre 3 : quelques classes prédéfinies 52 C) Format d'affichage Depuis la version 1.5, Java utilise printf comme le C pour afficher des expressions. /* Fichier Formatage.java * Un peu de formatage (pour les tps) * */ public class Formatage { public static void main(String[] args) { int age = 23; System.out.println("1234567890123456789012345678901234567890"); System.out.printf("%5d%3d%12d\n", age, age, age); System.out.println(); double taille = 1.7258; System.out.println("1234567890123456789012345678901234567890"); System.out.printf("%6.1f%8.2f\n", taille, taille); char sexe = 'F'; System.out.println("1234567890123456789012345678901234567890"); System.out.printf("%3c%7.2f metre %s\n", sexe, taille, (sexe == 'F'? "feminin":"masculin")); String souhait = "Bonne soiree"; System.out.println("1234567890123456789012345678901234567890"); System.out.printf("%-20s\n", souhait); System.out.printf("%20s\n", souhait); } } /* Exécution: 1234567890123456789012345678901234567890 23 23 23 1234567890123456789012345678901234567890 1,7 1,73 1234567890123456789012345678901234567890 F 1,73 metre feminin 1234567890123456789012345678901234567890 Bonne soiree Bonne soiree Press any key to continue... */ IFT 1170, automne 2006 (par Le Van N.) Chapitre 3 : quelques classes prédéfinies 53 /* Pour présenter "un peu" des résultats Utile pour les TPs */ Classe prédéfinie String (chaîne de caractères). Ce document est adapté à partir du document de la compagnie SUN qui se trouve sur le lien : http://java.sun.com/j2se/1.5.0/docs/api/ J’ai ajouté quelques exemples permettant de comprendre les constructeurs et quelques méthodes utiles de cette classe. Comme la classe String fait partie du paquet java.lang (langage Java), on n’a pas besoin d’importer. La plupart des questions des travaux pratiques utilisent la classe prédéfinie String. Quelques constructeurs String() Initializes a newly created String object so that it represents an empty character sequence. Exemple : String ch = new String(); // ch est une chaîne vide (aucun caractère) String(String value) Initializes a newly created String object so that it represents the same sequence of characters as the argument; in other words, the newly created string is a copy of the argument string. Exemple : String nomPre = new String("Charbonneau Jacques"); NomPre est la chaîne de caractères "Charbonneau Jacques" etc . . . Quelques méthodes char charAt(int index) Returns the character at the specified index (retourne le caractère à tel indice) Exemple : "Charbonneau Jacques".charAt(0) vaut ‘C’ et "Charbonneau Jacques".charAt(1) vaut ‘h’ int compareTo(String anotherString) Compares two strings lexicographically. Exemple : "Bon".compareTo("Bal") retourne un entier supérieur à zéro car ‘o’ > ‘a’ (dans l’ordre alphabétique) "Bon" > "Bal" "BON".compareTo("Bon") retourne un entier inférieur à zéro car ‘O’ < ‘o’ (les lettres en majuscules ‘A’, ‘B’, …, ‘O’, … se trouvent avant celles en minuscules ‘a’, ‘b’, …, ‘o’, … "BON" < "Bon" "BON".compareTo("BON") retourne zéro (les deux chaînes sont identiques) IFT 1170, automne 2006 (par Le Van N.) Chapitre 3 : quelques classes prédéfinies 54 boolean equals(Object anObject) Compares this string to the specified object. Exemple : "Bon".equals("Bal") retourne false et "Bon".equals("Bon") retourne true boolean equalsIgnoreCase(String anotherString) Compares this String to another String, ignoring case considerations. Exemple : "Bon".equals("BON") retourne false mais "Bon".equalsIgnoreCase("BON") retourne true (sans distinguer majuscules, minuscules). int indexOf(int ch) Returns the index within this string of the first occurrence of the specified character. Exemple : "Bonbon".indexOf(‘n’) retourne 2 et "Bonbon".indexOf(‘z’) retourne – 1 (non trouvé) int indexOf(int ch, int fromIndex) Returns the index within this string of the first occurrence of the specified character, starting the search at the specified index. Exemple : "Bonbon".indexOf(‘n’, 3) retourne 5 et "Bonbon".indexOf(‘b’, 4) retourne –1 (non trouvé) int indexOf(String str) Returns the index within this string of the first occurrence of the specified substring. Exemple : "Bonbon".indexOf(" on") retourne 1 et "Bonbon".indexOf(" onze") retourne –1 (non trouvé) int indexOf(String str, int fromIndex) Returns the index within this string of the first occurrence of the specified substring, starting at the specified index. int lastIndexOf(int ch) Returns the index within this string of the last occurrence of the specified character. Exemple : "Bonbon".lastIndexOf(‘n’) retourne 5 et "Bonbon".lastIndexOf(‘z’) retourne –1 (non trouvé) int lastIndexOf(int ch, int fromIndex) Returns the index within this string of the last occurrence of the specified character, searching backward starting at the specified index. int lastIndexOf(String str) Returns the index within this string of the rightmost occurrence of the specified substring. int lastIndexOf(String str, int fromIndex) Returns the index within this string of the last occurrence of the specified substring. int length() Returns the length of this string (retourne la longueur de la chaîne) Exemple : "Bonbon".length() retourne 6 (la longueur de la chaîne est 6) Ne pas oublier les parenthèses pour la méthode length() String replace(char oldChar, char newChar) Returns a new string resulting from replacing all occurrences of oldChar in IFT 1170, automne 2006 (par Le Van N.) Chapitre 3 : quelques classes prédéfinies 55 this string with newChar. boolean startsWith(String prefix) Tests if this string starts with the specified prefix. boolean startsWith(String prefix, int toffset) Tests if this string starts with the specified prefix beginning a specified index. String substring(int beginIndex) Returns a new string that is a substring of this string. Exemple : "Bonbon".substring(2) retourne la sous-chaîne "nbon" String substring(int beginIndex, int endIndex) Returns a new string that is a substring of this string. Exemple : "Bonbon".substring(2, 4) retourne la sous-chaîne "nb" (indice 2 inclus, indice 4 exclu !) String toLowerCase() Converts all of the characters in this String to lower case using the rules of the default locale, which is returned by Locale.getDefault. conversion toute la chaîne en lettres minuscules. Exemple : "Bonbon".toLowerCase() retourne la chaîne "bonbon" String toString() This object (which is already a string!) is itself returned. String toUpperCase() Converts all of the characters in this String to upper case using the rules of the default locale, which is returned by Locale.getDefault. Exemple : "Bonbon".toUpperCase() retourne la chaîne "BONBON" String toUpperCase(Locale locale) Converts all of the characters in this String to upper case using the rules of the given locale. String trim() Removes white space from both ends of this string. Exemple : " Bonjour tout le monde ".trim() retourne la chaîne "Bonjour tout le monde ".trim() static String valueOf(boolean b) Returns the string representation of the boolean argument. static String valueOf(char c) Returns the string representation of the char argument. static String valueOf(char[] data) Returns the string representation of the char array argument. static String valueOf(char[] data, int offset, int count) Returns the string representation of a specific subarray of the char array argument. static String valueOf(double d) Returns the string representation of the double argument. static String valueOf(float f) Returns the string representation of the float argument. static String valueOf(int i) Returns the string representation of the int argument. IFT 1170, automne 2006 (par Le Van N.) Chapitre 3 : quelques classes prédéfinies 56 static String valueOf(long l) Returns the string representation of the long argument. static String valueOf(Object obj) Returns the string representation of the Object argument. Classe prédéfinie Integer (objets associés aux entiers). Ce document est adapté à partir du document de la compagnie SUN qui se trouve sur le lien : http://java.sun.com/j2se/1.5.0/docs/api/ J’ai ajouté quelques exemples permettant de comprendre les constructeurs et quelques méthodes utiles de cette classe. Comme la classe Integer fait partie du paquet java.lang (langage Java), on n’a pas besoin d’importer. Quelques exemples du cours IFT 1170 utiliseront la classe prédéfinie Integer. Pourquoi a t-on besoin de la classe Integer ? - pour utiliser ses champs prédéfinis - pour appliquer des méthodes appropriées sur leurs objets. Quelques champs d’information : static int MAX_VALUE The largest value of type int. Integer.MAX_VALUE est une constante de la classe Integer. Elle représente l’entier le plus grand 2147483647 static int MIN_VALUE The smallest value of type int. Integer.MIN_VALUE est une constante de la classe Integer. Elle représente l’entier le plus petit -2147483648 Constructeurs Integer(int value) Constructs a newly allocated Integer object that represents the primitive int argument. Exemple : Integer z = new Integer(12) ; z est un objet de la classe Integer représentant l’entier 12 Integer(String s) Constructs a newly allocated Integer object that represents the value represented by the string. Exemple : Integer z = new Integer("432") ; z est un objet de la classe Integer représentant l’entier 432 IFT 1170, automne 2006 (par Le Van N.) Chapitre 3 : quelques classes prédéfinies 57 Quelques méthodes utiles boolean equals(Object obj) Compares this object to the specified object. float floatValue() Returns the value of this Integer as a float. int intValue() Returns the value of this Integer as an int. static int parseInt(String s) Parses the string argument as a signed decimal integer. String toString() Returns a String object representing this Integer's value. static Integer valueOf(String s) Returns a new Integer object initialized to the value of the specified String. Notez que l’affectation int age = Integer.parseInt(“27“) ; affecte à la variable age la valeur 27 Soit le tableau des ages : int age[] = { 25, 12, 70, 97, 12, 40, 28 }; Le bloc d’instructions suivantes permettant de déterminer et d’afficher l’âge le plus grand : int ageMax = Integer.MIN_VALUE; for (int i = 0 ; i < age.length ; i++) if ( age[i] > ageMax ) ageMax = age[i]; System.out.println("Age maximum : " + ageMax); IFT 1170, automne 2006 (par Le Van N.) Chapitre 3 : quelques classes prédéfinies 58 Classe prédéfinie : StringTokenizer java.util Class StringTokenizer ( chaîne decomposable en jetons ) java.lang.Object java.util.StringTokenizer Jeton (token) est une sous-chaîne entre 2 séparateurs. Voir exemple Token.java Constructor Summary StringTokenizer(String str) Constructs a string tokenizer for the specified string. StringTokenizer(String str, String delim) Constructs a string tokenizer for the specified string. etc . . . Method Summary int countTokens() Calculates the number of times that this tokenizer's nextToken method can be called before it generates an exception. boolean hasMoreElements() Returns the same value as the hasMoreTokens method. boolean hasMoreTokens() Tests if there are more tokens available from this tokenizer's string. Oui ou Non si la chaîne dispose encore de jetons Object nextElement() Returns the same value as the nextToken method, except that its declared return value is Object rather than String. String nextToken() Returns the next token from this string tokenizer. Retourner le jeton courant et avancer au prochain jeton String nextToken(String delim) Returns the next token in this string tokenizer's string. IFT 1170, automne 2006 (par Le Van N.) Chapitre 3 : quelques classes prédéfinies 59