3-Chaînes de caractères, entrée/sortie

Transcription

3-Chaînes de caractères, entrée/sortie
Chaı̂nes de caractères
Objets Immuables
Entrée/Sortie
Programmation Orientée Objet
3-Chaı̂nes de caractères, entrée/sortie
Emmanuel Hyon
Université Paris Ouest Nanterre
UFR SEGMI - L2 MIA - 2010/2011
17 mars 2011
1 / 22
Chaı̂nes de caractères
Objets Immuables
Entrée/Sortie
Sommaire
1 Chaı̂nes de caractères
2 Objets Immuables
3 Entrée/Sortie
Inter action clavier ecran
2 / 22
Chaı̂nes de caractères
Objets Immuables
Entrée/Sortie
Sommaire
1 Chaı̂nes de caractères
2 Objets Immuables
3 Entrée/Sortie
3 / 22
Chaı̂nes de caractères
Objets Immuables
Entrée/Sortie
La classe String
• Les chaı̂nes de caractères sont représentées en Java par la
classe String
• Toute chaı̂ne de caractère est donc une instance de String
1
2
String vide = ""; // cha^
ıne vide
String salut = "Bonjour !";
4 / 22
Chaı̂nes de caractères
Objets Immuables
Entrée/Sortie
Sous-chaı̂nes
• L’extraction d’une sous-chaı̂ne se fait avec la méthode :
substring(int first, int last + 1) : String
• first est l’index de la première position à copier
• last est l’index de la dernière position à copier, auquel il faut
rajouter 1
• la numérotation des positions commence à zéro
1
2
String beau = "Il fait beau !".substring(8, 12);
// beau vaut "beau"
5 / 22
Chaı̂nes de caractères
Objets Immuables
Entrée/Sortie
String est immuable !
• Il est impossible de remplacer des caractères à l’intérieur de la
même chaı̂ne.
• Pour ce faire, il faut concaténer la sous-chaı̂ne qu’on veut
conserver avec les caractères qu’on veut remplacer.
• Cela créera une nouvelle chaı̂ne
• Cette caractéristique rend toute instance de String immuable
1
2
3
String salut = "bonjour !";
salut = salut.substring(0, 3) + "soir !"
// salut possède maintenant la référence d’une nouvelle
cha^
ıne qui vaut : "bonsoir !"
6 / 22
Chaı̂nes de caractères
Objets Immuables
Entrée/Sortie
Pourquoi String est-elle immuable ?
• Principalement favoriser le partage de références vers les
mêmes chaı̂nes de caractères
• Plus de réutilisation et comparaison que de modification dans
la majorité des programmes
• Inconvénient : problème de performance dans le cas où la
modification l’emporte
• Dans le cas d’une construction progressive de chaı̂nes, il existe
des classes adaptées, telles que StringBuffer et
StringBuilder.
7 / 22
Chaı̂nes de caractères
Objets Immuables
Entrée/Sortie
Egalité entre Strings
• Le test de l’égalité se fait sur le contenu des objets de type
String et non sur leurs références.
• Utiliser l’API equals ou equalsIgnoreCase et non ==
• == a pour effet de déterminer si les deux objets possèdent la
même référence
1
2
3
4
String greeting = "bonjour";
if ("Bonjour".equalsIgnoreCase(greeting)) {
//faire quelque chose
}
8 / 22
Chaı̂nes de caractères
Objets Immuables
Entrée/Sortie
Construction progressive de chaı̂nes
• Il est inefficace de construire progressivement des chaı̂nes avec
l’opérateur de concaténation +
• Chaque concaténation donne lieu à la création d’une nouvelle
chaı̂ne
• Il est mieux dans ce cas d’utiliser StringBuilder ou
StringBuilder
1
2
3
4
StringBuilder sb = new StringBuilder()
sb.append("Voici un début de texte\n");
sb.append("Voici une nouvelle ligne de texte.");
sb.toString(); // retournera toute la séquence de cha^
ınes
construite
9 / 22
Chaı̂nes de caractères
Objets Immuables
Entrée/Sortie
Sommaire
1 Chaı̂nes de caractères
2 Objets Immuables
3 Entrée/Sortie
10 / 22
Chaı̂nes de caractères
Objets Immuables
Entrée/Sortie
Les Objets immuables
Qu’est ce qu’un objet immuable
Un objet immuable (immutable en anglais) est un objet dont les
attributs d’instances accessibles ne changent pas après la création.
Les objets immuables sont
• String,
• Tous les objets représentant un type primaire : Integer,
Float, Boolean,....
Les avantages
Ils sont Thread Safe.
Ils n’ont pas besoin d’être clonés
Ils gardent la même référence.
11 / 22
Chaı̂nes de caractères
Objets Immuables
Entrée/Sortie
Sommaire
1 Chaı̂nes de caractères
2 Objets Immuables
3 Entrée/Sortie
Inter action clavier ecran
12 / 22
Chaı̂nes de caractères
Objets Immuables
Entrée/Sortie
Inter action clavier ecran
Lecture à la console
Encapsuler System.in dans la classe Scanner
1
2
3
4
5
6
Scanner in = new Scanner(System.in);
String name = in.next(); // lecture d’un mot
String address = in.nextLine(); // lecture d’une ligne
int age = in.nextInt(); // lecture d’un entier
double salary = in.nextDouble(); // lecture d’un réel
boolean prochain=in.hasnext(); // y a-t-il un prochain item
Scanner se trouve dans le package java.util :
1
import java.util.Scanner;
13 / 22
Chaı̂nes de caractères
Objets Immuables
Entrée/Sortie
Inter action clavier ecran
Lecture à la console II Exemple
1 Scanner scan = new Scanner(System.in);
2 System.out.print(’’Saissisez votre nom’’);
3 String mot = in.next(); // lecture du mot
4 System.out.println(’’Saissisez votre nom’’);
5 String mot = in.nextLine(); // lecture du mot
6 char c =mot.charAt(2);
7 System.out.println(’’Saissisez votre age’’);
8 int age = in.nextInt(); // lecture de l’entier
9 System.out.println(’’Saissisez votre poids’’);
10 double poids = in.nextDouble(); // lecture d’un réel
14 / 22
Chaı̂nes de caractères
Objets Immuables
Entrée/Sortie
Inter action clavier ecran
Parsing avec scanner
Décomposition en jetons
1
2
3
4
Scanner in = new Scanner(System.in);
in.useDelimiter(’’;’’);
while (in.hasNext())
System.out.print(‘‘ mot est ‘‘+in.next());
si la ligne est : Bon ;jour Mon ;Ami
le programme donne : Bon jour Mon Ami.
si delimiteur est “ “ et la ligne est : Bon ;jour Mon ;Ami
le programme donne : Bon ;jour Mon ;Ami.
StringTokenizer est une autre classe qui permet de
transformer une phrase.
15 / 22
Chaı̂nes de caractères
Objets Immuables
Entrée/Sortie
Inter action clavier ecran
Affichage formaté
• Lorsqu’on souhaite un affichage bien formaté,
System.out.print (et variante en ln) n’est souvent pas
satisfaisant
• Utiliser System.out.printf avec des spécificateurs de
format (à la C)
• plusieurs spécificateurs peuvent être utilisés dans le même
affichage
1
2
3
double x = 10000.0 / 3.0;
// 8 positions, précision 2
System.out.printf("%8.2f", x); // 3333.33
16 / 22
Chaı̂nes de caractères
Objets Immuables
Entrée/Sortie
Inter action clavier ecran
Spécificateurs de format pour printf
Spécificateur
d
x
o
f
e
g
s
c
b
tx
Type
Decimal integer
Hexadecimal integer
Octal integer
fixed-point floating point
Exponential floating-point
General floating-point (shorter of
e and f)
String
Character
boolean
Date and time
Exemple
159
9f
237
15.9
1.59e+01
Computer
P
true
Voir tableau
suivant
17 / 22
Chaı̂nes de caractères
Objets Immuables
Entrée/Sortie
Inter action clavier ecran
Spécificateurs de format pour Date
Spécificateur Type
c
Complete date and time
F
D
T
R
Y
B
d
A
mx
ISO 8601 date
US formatted date
24-hour time
24-hour time, no seconds
Four-digit year
Full month name
Two-digit day
Full week day name
Two-digit month
Exemple
Tue Feb 16
11 :12 :05 PST
2010
2010-02-16
02/16/2010
14 :32 :45
15 :23
2010
March
06
Wednesday
03
18 / 22
Chaı̂nes de caractères
Objets Immuables
Entrée/Sortie
Inter action clavier ecran
Affichage de date
• Utiliser tx, où x est l’un des spécificateurs du tableau
précédent
1
2
System.out.printf("%tc", new Date());
// mar. févr. 16 18:20:48 CET 2010
19 / 22
Chaı̂nes de caractères
Objets Immuables
Entrée/Sortie
Inter action clavier ecran
Lecture d’un fichier
• Encapsuler la classe File dans la classe Scanner
• L’emplacement du fichier indiqué est relatif au répertoire où
Java a lancé l’exécution du programme
• Utiliser un chemin absolu en cas de problème avec le chemin
relatif
• Ou String dir = System.getProperty("user.dir")
pour récupérer le chemin vers le répertoire courant de travail
1
2
Scanner in = new Scanner(new File("fichier.txt"));
// toutes les méthodes de Scanner peuvent ^
etre utilisées
pour la lecture
20 / 22
Chaı̂nes de caractères
Objets Immuables
Entrée/Sortie
Inter action clavier ecran
Lecture d’un fichier inexistant
• Une exception sera levée
• Avant d’étudier les exceptions, il faut maintenant indiquer au
compilateur qu’une telle exception doit être propagée
• Ce mécanisme est mis en œuvre avec le mot-clé throws
1
2
3
4
public static void main(String[] args) throws
FileNotFoundException {
Scanner in = new Scanner(new File("fichier.txt"));
// ...
}
21 / 22
Chaı̂nes de caractères
Objets Immuables
Entrée/Sortie
Inter action clavier ecran
Écriture dans un fichier
• Utiliser la classe PrintWriter
• Si le fichier n’existe pas, il est créé
• S’il existe déjà, son contenu actuel est écrasé
1
2
3
PrintWriter out = new PrintWriter("fichier.txt");
out.println("Notes de cours de POO");
// On peut utiliser également print et printf.
22 / 22