9
I.S.N. TP n°7-Chaîne de caractères 1 Manipuler des chaînes de caractères Un caractère se déclare avec le type char : Dans Processing (en mode Java) taper le code suivant : char caractere1='E';// charge dans la variable caractere1 le code ASCII de la lettre E println(caractere1); En fait dans la variable caractere1 est stockée le code ASCII (American Standard Code for Information Interchange) de la lettre 'E'. Vous trouverez facilement sur internet des tables qui donnent le code ASCII de n’importe quel caractère. Mais on n’en a pas vraiment besoin…. Les caractères américains (dits internationaux) sont numérotés de 0 à 127. Des extensions multilingues sont proposées entre 128 et 255, c'est le code ANSI, connu sous le nom ISO-Latin 1. Par exemple le code de 'é' est égal à 233, celui du 'ñ' espagnol est 241. Le consortium UNICODE (www.unicode.org) a mis au point une numérotation des caractères(en base 16) qui représente la totalité des langues du monde, ainsi que les symboles spéciaux (musique, maths, etc). On peut à l’aide du code suivant faire afficher le caractère correspondant à un code ASCII . char caractere1='E'; println(caractere1); char caractere2=(char)1000;//On déclare un caractère2 en forçant (cast) le nombre écrit à être pris comme un char println(caractere2);// on fait afficher le caractère Faire quelques essais et écrire un programme qui affiche les caractères dont les codes ASCII sont compris entre deux nombres entiers que vous choisirez. Comment passer de la majuscule à la minuscule et inversement ? Le décalage entre majuscule et minuscule est constant. Par exemple le code ASCII de la lettre A est 65 et celle de la lettre a est 97 soit une différence de 32. Il y aura la même différence entre les lettres E et e. Mettons cela en pratique avec le code suivant : (le commenter) char caractere1='E'; println(caractere1); char A='A'; char a='a'; int decalage=a-A; char minE=(char)(caractere1+decalage); println(minE); Compléter ce code pour qu’il mette en majuscule une lettre en minuscule que vous choisirez. On peut ainsi imaginer des codes pour manipuler des caractères, mais cela devient vite fastidieux s’il s’agit de phrases entières. Pour les chaînes de caractères on utilise le type String.

Manipuler des chaînes de caractères...I.S.N. TP n 7-Chaîne de caractères 2 L’ojet de type String Le type String permet donc de stocker une chaîne de caractères qui ensemble

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Manipuler des chaînes de caractères...I.S.N. TP n 7-Chaîne de caractères 2 L’ojet de type String Le type String permet donc de stocker une chaîne de caractères qui ensemble

I.S.N. TP n°7-Chaîne de caractères

1

Manipuler des chaînes de caractères

Un caractère se déclare avec le type char :

Dans Processing (en mode Java) taper le code suivant :

char caractere1='E';// charge dans la variable caractere1 le code ASCII de la lettre E

println(caractere1);

En fait dans la variable caractere1 est stockée le code ASCII (American Standard Code for Information

Interchange) de la lettre 'E'. Vous trouverez facilement sur internet des tables qui donnent le code ASCII

de n’importe quel caractère. Mais on n’en a pas vraiment besoin….

Les caractères américains (dits internationaux) sont numérotés de 0 à 127. Des extensions multilingues

sont proposées entre 128 et 255, c'est le code ANSI, connu sous le nom ISO-Latin 1. Par exemple le code

de 'é' est égal à 233, celui du 'ñ' espagnol est 241.

Le consortium UNICODE (www.unicode.org) a mis au point une numérotation des caractères(en base 16)

qui représente la totalité des langues du monde, ainsi que les symboles spéciaux (musique, maths, etc).

On peut à l’aide du code suivant faire afficher le caractère correspondant à un code ASCII .

char caractere1='E';

println(caractere1);

char caractere2=(char)1000;//On déclare un caractère2 en forçant (cast) le nombre

écrit à être pris comme un char

println(caractere2);// on fait afficher le caractère

Faire quelques essais et écrire un programme qui affiche les caractères dont les codes ASCII

sont compris entre deux nombres entiers que vous choisirez.

Comment passer de la majuscule à la minuscule et inversement ?

Le décalage entre majuscule et minuscule est constant. Par exemple le code ASCII de la lettre A est 65 et

celle de la lettre a est 97 soit une différence de 32. Il y aura la même différence entre les lettres E et e.

Mettons cela en pratique avec le code suivant : (le commenter)

char caractere1='E';

println(caractere1);

char A='A';

char a='a';

int decalage=a-A;

char minE=(char)(caractere1+decalage);

println(minE);

Compléter ce code pour qu’il mette en majuscule une lettre en minuscule que vous choisirez.

On peut ainsi imaginer des codes pour manipuler des caractères, mais cela devient vite fastidieux s’il

s’agit de phrases entières. Pour les chaînes de caractères on utilise le type String.

Page 2: Manipuler des chaînes de caractères...I.S.N. TP n 7-Chaîne de caractères 2 L’ojet de type String Le type String permet donc de stocker une chaîne de caractères qui ensemble

I.S.N. TP n°7-Chaîne de caractères

2

L’objet de type String

Le type String permet donc de stocker une chaîne de caractères qui ensemble constituent une phrase.

(En fait String n’est pas une variable à proprement parlé, c’est un objet. C’est pour cela qu’il faut mettre

un ‘’S’’ majuscule au début.)

Commençons par déclarer la chaîne suivante :

// met la phrase dans l’objet String phrase1

String phrase1="Une phrase est une chaîne de caractère";

println(phrase1);//affiche le contenu de phrase1

Comme phrase1 est un objet de type String, on peut lui appliquer des méthodes prédéfinies en Java.

Changer « la casse »

//on met dans phrase2 la phrase 1 mise en Majuscule

String phrase2=phrase1.toUpperCase();

// on met dans phrase3 la phrase2 mise en minuscule

String phrase3=phrase2.toLowerCase();

Taper ces deux lignes de codes et faire afficher les deux phrases..

Longueur d’une chaîne

//affiche la longueur de Phrase 1

println(phrase1.length());

Rajouter cette ligne. Pourquoi l’affichage donne 38 ?

Un caractère de la chaîne

Phrase 1 est une chaîne de caractères de longueur 38. Sachant que la 1er est numéroté à 0, le dernier à 37.

Quel est le caractère se trouvant à la 10ème place ?

La méthode charAt(10) permet de répondre à cela.

char caracterei = phrase1.charAt(10);

println(caracterei);

Rajouter ces deux lignes et faire différents essais.

POURQUOI LE PROGRAMME SEMBLE NE PAS AFFICHER CE CARACTERE ??????????........ !!!!!!!

Page 3: Manipuler des chaînes de caractères...I.S.N. TP n 7-Chaîne de caractères 2 L’ojet de type String Le type String permet donc de stocker une chaîne de caractères qui ensemble

I.S.N. TP n°7-Chaîne de caractères

3

Rechercher un caractère dans une chaîne

Phrase1 contient 6 « e ». Il est parfois utile de savoir à quel indice apparaît le 1er .

La méthode indexOf(le caractère). Répond à cela

int indice1e=phrase1.indexOf('e');

println("le premier e est à l'indice :"+indice1e);

Rajouter ces deux lignes et faire d’autres essais.

Phrase1 contient la sous-chaîne : est. On peut savoir avec la méthode indexOf(chaîne) à quel indice elle

fait sa première apparition.

String est="est";

int indice1est=phrase1.indexOf(est);

println("le premier << est >> est à l'indice :"+indice1est);

Rajouter ces trois lignes et faire d’autres essais.

Extraire une sous-chaîne.

La méthode substring(indicededébut,indicedefin) permet d’extraire une sous-chaîne d’une chaîne.

// on met dans sousphrase1 la sous-chaîne qui commence à l’indice 0 et finit à l’indice 10.

String sousphrase1=phrase1.substring(0,10) ;

println("on a extrait: "+sousphrase1);

// si on ne met qu’un seul entier dans substring cela signifie de cet entier jusqu’à la fin.

String sousphrase2=phrase1.substring(10) ;

println("on a extrait: "+sousphrase2);

Rajouter ces deux lignes et modifier ces lignes pour extraire « une chaîne de caractères »

Cette méthode permet de modifier un caractère ou une sous-chaîne de la phrase.

Par exemple si on souhaite mettre en Majuscule le terme d’indice 19 de phrase1.

String debut=phrase1.substring(0,18);

String fin=phrase1.substring(20);

//on met en majuscule le caractère d’indice 19 en forçant(cast) le type char.

char caract=(char)(phrase1.charAt(19)-decalage);

// l’addition en String est une concaténation. ( un blanc à été « mangé »)

String phrasemodifie=debut+" "+caract+fin ;

println(phrasemodifie);

Rajouter ces lignes et écrire le code dont le résultat est :

Une phrase EST une chaîne de caractère

(Vous pouvez considérer « est » comme 3 caractères ou comme une sous-chaîne)

Page 4: Manipuler des chaînes de caractères...I.S.N. TP n 7-Chaîne de caractères 2 L’ojet de type String Le type String permet donc de stocker une chaîne de caractères qui ensemble

I.S.N. TP n°7-Chaîne de caractères

4

Ces méthodes sont prédéfinies dans Java. On peut aussi créer notre propre fonction qui ne

fonctionnera que dans notre programme. C’est la différence principale entre méthode et fonction.

Nous allons créer une fonction qui change par exemple : tous les caractères e d’une chaine de caractère

par le caractère x. Pour ce faire on va mettre notre chaîne dans un tableau avec l’instruction :

//déclare un tableau de type char qui contient notrechaine

char[] tmp=notrechaine.toCharArray();

//et inversement pour transformer un tableau de char en chaine de caractere :

String nouVellePhrase=new string(tmp) ;

Rappel : une fonction se déclare hors du programme principal.

Notons cette fonction : remplace(String str, char c1,char c2) ; comme elle renvoie un objet de type String

il faut la déclarer après (ou avant) le programme principal comme suit :

faire un nouveau programme ( à compléter pour qu’il fonctionne)

import javax.swing.*;

char a='e';

char b='x';

void setup(){

String s = (String)JOptionPane.showInputDialog( null,

"écrivez une phrase", "Dialog", JOptionPane.PLAIN_MESSAGE);

String phrase2=remplace(phrase,a,b);//appel de la fonction

println(phrase2);

}

//La fonction

String remplace(String str,char c1,char c2){

char[] tmp=str.toCharArray();

for(?????????){

if(??????){

???????;

}

}

return new String(tmp);

}

tmp est un tableau. Revoir le tp 5

pour trouver l’instruction qui

permet d’accéder à un élément du

tableau ainsi que sa longueur…

Page 5: Manipuler des chaînes de caractères...I.S.N. TP n 7-Chaîne de caractères 2 L’ojet de type String Le type String permet donc de stocker une chaîne de caractères qui ensemble

I.S.N. TP n°7-Chaîne de caractères

5

Une petite animation Bien entendu toutes les méthodes prédéfinies dans Java fonctionnent sous Processing. Cependant comme

Processing est un environnement Java qui permet de dessiner dans une fenêtre, il y a dans Processing des

méthodes particulières pour dessiner du texte dans une fenêtre en choisissant une police particulière.

Faisons « clignoter » le mot PROCESSING dans une fenêtre.

Dans un premier temps il faut choisir la police de caractère que l’on souhaite utiliser.

Cela se fait dans le menu

Outils -----> Générer la police ------> choisir une police

(en profiter pour copier le nom avec Ctrl-C) et cliquer sur ok.

On choisit par exemple : Andy-Bold-48.vlw

( on peut en choisir plusieurs)

La police est mise automatiquement dans le dossier data

On tape les lignes suivantes :( En lisant attentivement les commentaires)

// on declare une variable String process dans laquelle on met le mot PROCESSING

String process="PROCESSING";

// comme on va faire une “animation” on a besoin de void setup() et de void draw()

void setup(){

size(300,200);

background(0,0,0);

// on déclare une variable PFont (spécificité de Processing) destinée à contenir notre

police

PFont font;

// on charge la police dans la variable font

font=loadFont("Andy-Bold-48.vlw");

// cette méthode sert à initialiser la police avec font et la taille du texte (ici 48)

textFont(font,48);

}

//rappel : void draw() est une méthode qui boucle sur elle-même

void draw(){

frameRate(20);// nombre de fois ou la boucle se fait par seconde

fill(random(255),random(255),random(255));//couleur de remplissage

/**######################################################################

Méthode (spécificité de Processing) qui affiche dans la fenêtre le contenu de process

avec la première lettre aux coordonnées (10,100)

######################################################################*/

text(process,10,100);

}

Modifier ce programme pour qu’il affiche votre nom, votre classe et ce que vous voulez…

« clignotant ou pas » en défilant dans la fenêtre un peu comme dans un générique de film…..

Page 6: Manipuler des chaînes de caractères...I.S.N. TP n 7-Chaîne de caractères 2 L’ojet de type String Le type String permet donc de stocker une chaîne de caractères qui ensemble

I.S.N. TP n°7-Chaîne de caractères

6

En JavaScript (p5js)-Mini Projet

Nous allons créer un programme qui charge plusieurs poèmes et qui affiche de

façon aléatoire quelques vers empruntés à ces poèmes

Travail préparatoire :

Dans un premier temps, il faut récupérer sur internet des poèmes…

Copiez-les et collez-les, à la suite les uns des autres, dans le Bloc-Notes et enregistrez ce fichier

sous le nom de poemes. Attention de choisir l’encodage en UTF-8 (pour un affichage normal des

accents…)

Ouvrez Processing en mode p5js et glissez-déposez ce fichier dans la fenêtre.

Choix de la police :

On ne peut pas utiliser la procédure précédente en mode p5js car l’extension (.vlw) n’est pas

reconnue par les navigateurs. Seules les extensions (.otf, .ttf) peuvent être utilisées.

Il faut donc les télécharger sur internet : voici des sites :

http://www.freefontsdownload.net/

http://www.fontspace.com/category/opentype

http://www.dafont.com/fr/

Choisir une police sur l’un de ces sites

Attention à en choisir une dont les caractères accentués existent !

Une fois (dé zippée) glissez-déposez le fichier dans la fenêtre de Processing

Page 7: Manipuler des chaînes de caractères...I.S.N. TP n 7-Chaîne de caractères 2 L’ojet de type String Le type String permet donc de stocker une chaîne de caractères qui ensemble

I.S.N. TP n°7-Chaîne de caractères

7

Le programme :

var p1=[];

var myFont;

function preload() {

p1=loadStrings('data/poemes.txt');

myFont=loadFont('data/AvenirRoman.otf');

}

function setup() {

createCanvas(800, 600);

textFont(myFont);//on choisit donc cette police

textSize(20);

//On choisit 20 éléments de la liste au hasard en les affichant

for (var i=0; i<20; i++) {

text(p1[floor(random(p1.length-1))], 10, 30+30*i);

}

}

function draw() {

}

Faites fonctionner ce programme

Faites en sorte que les vers défilent du bas vers le haut

On peut même se passer du Canvas, en faisant afficher les lignes dans la page

html avec la librairie p5dom

Ouvrez Processing en mode P5js et importer la librairie p5dom

Glissez-déposez le fichier poemes.txt (encodé en UTF-8) précédent

Pour le choix de la police c’est encore une procédure différente :

On va récupérer une ligne de code sur Google Font, que l’on mettra entre les balises

<style> </style> de la page html, puis on précisera que la police à utiliser est celle que l’on a

importée.

Déclarations des variables globales :

Une liste et myFont pour la police

Chargement du fichier poemes (chaque

ligne est un élément de la liste)

Chargement de la police

Il faut régler l’affichage en fonction

de la police et de la taille choisie

Page 8: Manipuler des chaînes de caractères...I.S.N. TP n 7-Chaîne de caractères 2 L’ojet de type String Le type String permet donc de stocker une chaîne de caractères qui ensemble

I.S.N. TP n°7-Chaîne de caractères

8

Sur la page de Google font, on choisit une police en cliquant sur le +

On clique ensuite sur le bandeau apparu en bas …

On copie la ligne de code @import…Que l’on colle dans la page html dans les balises <style>

Page 9: Manipuler des chaînes de caractères...I.S.N. TP n 7-Chaîne de caractères 2 L’ojet de type String Le type String permet donc de stocker une chaîne de caractères qui ensemble

I.S.N. TP n°7-Chaîne de caractères

9

On spécifie que l’on veut utiliser cette police dans le style du body de la page html

Le programme :

var p1=[];

var myP1;

function preload() {

p1=loadStrings('data/poemes.txt');

}

function setup() {

noCanvas();

for (var i=0; i<20; i++) {

var v1=p1[floor(random(p1.length-1))];

myP1=createDiv(v1);//on peut aussi utiliser createP(..)

myP1.attribute('align', 'center');

myP1.style('color', 'blue');

myP1.style('font-size', '20');

}

}

function draw() {

}

Faites fonctionner ce programme

Faites afficher un bouton pour relancer le setup()

Une idée de Projet avec des textes ? (l’imagination est notre seule limite...)