Informatique / Programmation



Documents pareils
Utilisation d objets : String et ArrayList

Chapitre 10. Les interfaces Comparable et Comparator 1

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Une introduction à Java

PROGRAMMATION PAR OBJETS

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Généralités sur le Langage Java et éléments syntaxiques.

Les chaînes de caractères

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Langage Java. Classe de première SI

Java Licence Professionnelle CISII,

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Programmer en JAVA. par Tama

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Apprendre Java en 154 minutes

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Cours 1: Java et les objets

Chapitre V. Les classes : Object, Vector, etc.

Package Java.util Classe générique

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

TD3: tableaux avancées, première classe et chaînes

Gestion distribuée (par sockets) de banque en Java

Cours 14 Les fichiers

Projet de Veille Technologique

Projet de programmation (IK3) : TP n 1 Correction

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

as Architecture des Systèmes d Information

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Plan du cours. Historique du langage Nouveautés de Java 7

TP1 : Initiation à Java et Eclipse

Programmation Par Objets et Langage Java

1. Langage de programmation Java

Java Licence Professionnelle CISII,

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Introduction au langage Java

Apprendre la Programmation Orientée Objet avec le langage Java (avec exercices pratiques et corrigés)

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Premiers Pas en Programmation Objet : les Classes et les Objets

RN2-Programmation Orientée Objet - JAVA CH 1 Introduction à la POO et Java

2 e édition JAVA 5 et 6. Jérôme Bougeault. TSoft et Groupe Eyrolles, 2003, 2008, ISBN :

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Programmation Orientée Objet Java

Initiation à JAVA et à la programmation objet.

Informatique / Programmation

Programmation par les Objets en Java

Tp 1 correction. Structures de données (IF2)

Héritage presque multiple en Java (1/2)

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

TD/TP PAC - Programmation n 3

OpenPaaS Le réseau social d'entreprise

RMI le langage Java XII-1 JMF

Java c est quoi? Java pourquoi?

TP, première séquence d exercices.

Développement d un logiciel de messagerie instantanée avec Dotnet (version simplifiée)

Chapitre VI- La validation de la composition.

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

INF 321 : mémento de la syntaxe de Java

Exercices sur les interfaces

Flux de données Lecture/Ecriture Fichiers

Objets et Programmation. origine des langages orientés-objet

INITIATION AU LANGAGE JAVA

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Environnements de développement (intégrés)

Chap III : Les tableaux

Auto-évaluation Programmation en Java

Programmation en Java IUT GEII (MC-II1) 1

JAVA TD0. Prise en main du langage Environnement de base JAVA 1

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Java au cœur de la base de données Oracle

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

I. Introduction aux fonctions : les fonctions standards

Chapitre 2. Classes et objets

ACTIVITÉ DE PROGRAMMATION

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

Chapitre I Notions de base et outils de travail

Threads. Threads. USTL routier 1

JAVA 8. JAVA 8 - Les fondamentaux du langage. Les fondamentaux du langage Java. Avec exercices pratiques et corrigés JAVA 8 29,90.

Anne Tasso. Java. Le livre de. premier langage. 6 e édition. Groupe Eyrolles, 2000, 2002, 2005, 2006, 2008, 2010, ISBN :

Structurer ses données : les tableaux. Introduction à la programmation

1 Définition d une classe en Java

Compléments de documentation Scilab : affichage de texte et formatage de nombres

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Java - la plateforme

La carte à puce. Jean-Philippe Babau

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

Java Licence professionnelle CISII,

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

TD/TP PAC - Programmation n 3

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

Programmation Orientée Objets Le Langage JAVA

Synchro et Threads Java TM

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

Java 1.5 : principales nouveautés

Transcription:

Informatique / Programmation Programmation orientée objet avec Java 07 : Chaînes de caractères Jacques Bapst jacques.bapst@hefr.ch

Chaînes de caractères (String) En Java les chaînes de caractères sont représentées par des objets de type String (une classe prédéfinie). Les chaînes de caractères ne font donc pas partie des types primitifs mais sont des types référence. Une syntaxe particulière est utilisée pour définir des littéraux de type String : on entoure le texte avec des guillemets (" "). On peut insérer des séquences d'échappement (identiques à celles définies pour le type char) dans les littéraux de type String. La déclaration et création d'une variable de type String s'effectue de la manière suivante : String sometext = "Hello"; "Hello" sometexte EIA-FR / Jacques Bapst PR1_07 2

Comparaison de chaînes Comme pour tous les types référence, l'opérateur "==" compare les références et non pas les objets référencés (les chaînes de caractères). La méthode equals() permet, elle, de comparer deux chaînes de caractères (objets référencés) et retourne true si elles sont égales. La méthode compareto() remplace les opérateurs "plus petit", "égal", "plus grand" en utilisant l'ordre lexicographique (ordre du dictionnaire) et en retournant respectivement une valeur (int) négative, 0 ou positive. String mystring = "abc"; String otherstr = "abcdef"; if (mystring == otherstr) System.out.println("Same string object"); if (mystring.equals(otherstr)) System.out.println("Same contents"); if (mystring.compareto(otherstr) < 0) System.out.println(myString + " smaller than " + otherstr); EIA-FR / Jacques Bapst PR1_07 3

Objets String immuables Les objets de type String sont immuables : une fois créés ils ne peuvent plus être modifiés. Naturellement, la variable de type référence peut changer de valeur, et pointer vers une nouvelle chaîne (créée à un autre emplacement). String sometext = "Hello"; sometext = "Bonjour"; sometext "Hello" "Bonjour" Les objets immuables ont l'avantage de pouvoir être partagés sans risque et l'on évite les problèmes d'alias ( optimisations possibles). Par contre, si l'on manipule fréquemment des objets de type String (à l'intérieur de boucles par exemple) cela peut conduire à la création d'un nombre considérable d'objets (temporaires) avec un coût non négligeable (ressources mémoires et temps d'exécution). Il est préférable dans ce cas de déclarer et utiliser des objets de type StringBuffer ou StringBuilder qui sont eux modifiables (voir pages suivantes). EIA-FR / Jacques Bapst PR1_07 4

Opérations sur les chaînes [1] L'opérateur "+" permet de concaténer (mettre bout à bout) des chaînes de caractères. Si un des deux opérandes de l'opérateur "+" est un String, l'autre opérande sera, si nécessaire, automatiquement converti en un objet de type String (par invocation de la méthode tostring()). String mytext = "Hello"; String String s1 = mytext + " Mark"; rec = "Hello" + s1 + 3 + ')'; Remarque : Les objets de type String étant immuables, la concaténation est implémentée en créant un objet temporaire de type StringBuffer qui est utilisé ensuite pour créer un nouvel objet de type String. C'est donc une opération assez lourde. EIA-FR / Jacques Bapst PR1_07 5

Opérations sur les chaînes [2] Différentes méthodes permettent de convertir des valeurs de types primitifs en objets de type String et inversement (voir la tabelle qui figure à la fin du premier chapitre du document de cours). Ces méthodes se trouvent soit dans la classe String, soit dans les classes Wrapper associées aux types primitifs ( Byte, Short, Integer, Long, Float, Double, Character, Boolean ). Dans les librairies de base, il existe souvent plusieurs méthodes pour effectuer un même type de conversion. int i = Integer.parseInt("43"); 43 double d = Double.parseDouble("3.14"); 3.14 String s = String.valueOf('Z'); "Z" boolean b = (i > 10); true String t = (new Boolean(b)).toString(); "true" String t = Boolean.toString(b); // Idem "true" EIA-FR / Jacques Bapst PR1_07 6

Opérations sur les chaînes [3] La classe String dispose d'un grand nombre de méthodes pour traiter les chaînes de caractères. Les exemples qui suivent n'en sont qu'une illustration sommaire. La méthode length() permet de connaître la longueur d'une chaîne de caractères (nombre de caractères). La méthode charat() permet de retrouver le caractère situé à la position n d'une chaîne (0 n length() 1). La méthode substring() retourne une sous-chaîne d'une chaîne donnée. Les paramètres déterminent la position initiale et la position finale (+1) de la sous-chaîne dans la chaîne originelle. String name = "James Bond"; int i = name.length(); // i = 10 char c = name.charat(1); // c = 'a' String s = name.substring(2, 4); String t = "Yes".toUpperCase(); // s = "me" // t = "YES" EIA-FR / Jacques Bapst PR1_07 7

Opérations sur les chaînes [4] La méthode split() permet de découper une chaîne de caractères sur la base d'un séparateur qui est exprimé sous la forme d'une expression régulière (regex). La méthode retourne le résultat dans un tableau de String qui contient les fragments découpés. La syntaxe à utiliser pour les expressions régulières est définie dans la classe Pattern (java.util.regex). public static void main(string[] args) { String String[] elems; path = "usr/lib/ruby/test.rb"; String seppattern1 = "/"; elems = path.split(seppattern1); // Slash separator String seppattern2 = "/ \\."; // Slash or dot separator elems = path.split(seppattern2); } elems { "usr", "lib", "ruby", "test.rb" } elems { "usr", "lib", "ruby", "test", "rb" } EIA-FR / Jacques Bapst PR1_07 8

Formatage de chaînes [1] A partir de la version 1.5 du langage, une méthode de formatage assez puissante a été introduite dans la classe String. Cette méthode statique nommée format() retourne une chaîne de caractères formatée et prend en paramètre une chaîne de formatage (qui doit respecter une certaine syntaxe), ainsi qu'un nombre variable d'arguments (de type Object ou de types primitifs qui seront automatiquement convertis par le nouveau mécanisme d'autoboxing). Exemple : String s = String.format("%.2f", v); dans ce cas, si v = 1.56789f, alors s = "1.57" La syntaxe de la chaîne de formatage est relativement complexe et sa description se trouve dans l'api de la classe Formatter (du package java.util). EIA-FR / Jacques Bapst PR1_07 9

Formatage de chaînes [2] Cette nouvelle méthode de formatage est largement inspirée de celle de la méthode printf() que l'on trouve dans le langage C (elle n'est pas totalement équivalente mais très fortement compatible). Une méthode printf() a d'ailleurs été ajoutée dans la classe PrintStream et peut donc être invoquée sur les flux de sortie System.out et System.err. Exemples : int i = 250; float v = 1.23456f; System.out.printf("v with 3 digits %.3f %n", v); System.out.printf("Hex/Octal %1$x/%1$o %n", i); System.out.printf("%5d%8.3f %n", i, v); v with 3 digits 1.235 Hex/Octal fa/372 250 1.235 EIA-FR / Jacques Bapst PR1_07 10

Classe StringBuffer [1] Contrairement à la classe String, la classe StringBuffer permet de créer des chaînes de caractères modifiables (la taille et le contenu peuvent varier durant l'exécution de l'application). La notion de capacité (Capacity) représente la taille du buffer interne qui mémorise la chaîne de caractères (nombre total de caractères disponibles avant de devoir agrandir la taille du buffer interne). La capacité est automatiquement augmentée lorsque c'est nécessaire. La capacité initiale peut être définie lors de la création d'un objet StringBuffer (paramètre du constructeur, 16 par défaut). Ne pas confondre capacité et longueur d'un objet StringBuffer. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 U n t e x t e length() = 8 capacity() = 20 EIA-FR / Jacques Bapst PR1_07 11

Classe StringBuffer [2] Pour créer un objet de type StringBuffer, on doit utiliser l'opérateur new( ) (pas de syntaxe simplifiée). StringBuffer sometext = new StringBuffer("Hello"); Création en définissant une capacité initiale : // Création d'une chaîne vide avec une capacité de 2000 caracères StringBuffer sb = new StringBuffer(2000); // Ajout d'une chaîne littérale (String) sb.append("bonjour"); System.out.println(sb.length()); // 7 System.out.println(sb.capacity()); // 2000 sb.append(" à tous!"); System.out.println(sb.length()); // 16 System.out.println(sb.capacity System.out.println(sb.capacity()); // 2000 EIA-FR / Jacques Bapst PR1_07 12

Opérations sur les StringBuffer Différentes méthodes permettent de manipuler les objets de type StringBuffer : append() insert() replace() delete() setcharat() deletecharat() substring() tostring() Ajoute un élément à la fin de la chaîne de caractères (surcharge pour différents types d'éléments) Insère un élément à une position donnée de la chaîne de caractères (surcharge pour différents types d'éléments) Remplace une partie d'une chaîne de caractères par une autre Efface une portion donnée d'une chaîne de caractères Remplace un caractère à une position donnée Efface (supprime) un caractère à une position donnée Extrait une sous-chaîne Convertit le contenu en type String EIA-FR / Jacques Bapst PR1_07 13

Conversions String StringBuffer Pour convertir un objet de type String en un objet de type StringBuffer on utilise le constructeur (opérateur new( )). String s1 = "Hello"; StringBuffer sbuf = new StringBuffer(s1); Pour convertir un objet de type StringBuffer en un objet de type String on utilise la méthode tostring( ) ou substring( ). StringBuffer vtext = new StringBuffer(); vtext.append("un texte"); String s2 = vtext.tostring(); String s3 = vtext.substring(3, 6); // s3 <-- "tex" EIA-FR / Jacques Bapst PR1_07 14

Classe StringBuilder Dans la librairie standard de la plateforme Java, on trouve également la classe StringBuilder. Son API est compatible avec celle de la classe StringBuffer qu'elle peut remplacer dans toutes les situations où le code s'exécute dans un seul thread (c'est-à-dire dans tous les cas où il n'est pas indispensable que le code soit thread-safe). La plupart des méthodes de la classe StringBuilder s'exécutent plus rapidement que celles de la classe StringBuffer. Toutes les indications données dans les pages précédentes pour la classe StringBuffer s'appliquent également à la classe StringBuilder. EIA-FR / Jacques Bapst PR1_07 15