"A string is a sequence of characters. The class String includes methods for examining individual characters, comparing strings, searching strings, extracting parts of strings, and for converting an entire string uppercase and lowercase.
Strings are always defined inside double quotes ("Abc"), and characters are always defined inside single quotes ('A').
To compare the contents of two Strings, use the equals() method, as in if (a.equals(b)), instead of if (a == b). A String is an Object, so comparing them with the == operator only compares whether both Strings are stored in the same memory location. Using the equals() method will ensure that the actual contents are compared."(Reference)
void setup(){
//exemple tiré de la documentation de Processing
String mot1 = "CCCP";
println("le mot1 est : "+mot1);
println("***********************");
char[] tableauCaracteres = {'C', 'C', 'C', 'P'};
println("le contenu du tableau de caractères est : ");
println(tableauCaracteres);
println("***********************");
String mot2 = new String(tableauCaracteres);
println("le mot2 est: "+mot2);
}
Pour apprendre à lire une documentation associée à un langage
Voir ici (jusqu'à Displaying text)Retenons pour l'instant qu'une classe C est un prototype avec des variables et des fonctions appelées méthodes
Que cette classe produit des objets de type C par un mécanisme de construction avec le mot réservé new
C unObjet1 = new C();C unObjet2 = new C();....C unObjetn = new C();
Par exemple String une Chaine = new String(); (ou int[] unTableau = new int[10];)
Imaginons que la classe C ait au moins une variable variableDeC , par exemple la classe int[] a pour variable lentgh alors que la classe String n'a pas de variable, alors pour un objet particulier créé unObjetk, pour accéder à la valeur de cette variable on fait :
unObjetk.variableDeC
Par exemple unTableau.lentgh
Par contre la classe C a toujours des méthodes (fonctions) qui facilitent le travail avec les objets construits. Ces fonctions sont soit déjà créées dans le langage de Programmation et dans ce cas il faut prendre connaissance de ces outils (programmeur utilisateur) soit il faut les créer lorsqu'on crée et met au point la classe (programmeur concepteur)
Par exemple la classe String a une méthode qui permet de transformer les lettres majuscules en minuscules toLowerCase(), si on veut mettre une chaîne particulière uneChaine en minuscule on fait :
String chaineMinuscule = uneChaine.toLowerCase();
Attention l'instruction uneChaine.toLowerCase() ne marche pas on dit que l'objet uneChaine est immutable
Par exemple si un tableau représente un polynôme on a intérêt à créer une méthode appelée affichePolynôme() et qui affiche le polynôme sous forme mathématique et on l'appelle ainsi :
unPolynome.affichePolynome();
Attention!!! "Another common source of confusion is the difference between using length to get the size of an array and length() to get the size of a String. Notice the presence of parentheses when working with Strings. (array.length is a variable, while String.length() is a method specific to the String class.) "(Reference)
void setup(){
//exemple tiré de la documentation de Processing
String mot1 = "CCCP";
println("le mot1 est : "+mot1);
println("***********************");
char[] tableauCaracteres = {'C', 'C', 'C', 'P'};
println("le contenu du tableau de caractères est : ");
println(tableauCaracteres);
println("***********************");
String mot2 = new String(tableauCaracteres);
println("le mot2 est: "+mot2);
println("la longueur du mot2 est: "+mot2.length());
println("la longueur du tableau tableauCaracteres est: "+
tableauCaracteres.length");
}
Retenons qu'il faut souvent lire la documentation d'un langage de programmation pour prendre connaissance des outils mis à notre disposition (méthodes d'une classe C) lorsqu'on utilise une classe C déjà existante dans le langage de programmation, pour éviter de réinventer en moins bien et en moins efficace ce qui existe déjà
Voir ici la documentation Java sur la classe String
Il nous arrivera aussi de concevoir des méthodes pour des classes répondant à un problème donné, dans ce cas nous sommes programmeur concepteur
"Datatype for characters, typographic symbols such as A, d, and $. A char stores letters and symbols in the Unicode format, a coding system developed to support a variety of world languages.
Voir ici
Each char is two bytes (16 bits) in length and is distinguished by surrounding it with single quotes. Character escapes may also stored as a char. For example, the representation for the "delete" key is 127. "(Reference")
Concrètement pour un ordinateur le caractère a que vous voyez à l'écran est en mémoire :
En binaire sur 2 octets 00000000 01100001 ( 97 en décimal 61 en hexadécimal)
Si vous voulez voir uniquement le caractère à l'écran :
vous faites char x='a';
Si vous voulez récupérer son codage numérique décimal:
vous faites int n = 'a';(dans n il y a 97)
L'instruction n = n + 3; met dans n la valeur 100
Qu'obtient on si on fait println((char)n); ou println(char(n)); ?
Les programmes que vous avez faits avec Processing sont sauvegardés en mémoire sous la forme d'un fichier .pde. Une image numérique est sauvegardée sous la forme d'un fichier .jpg par exemple.
Une façon de sauvegarder en mémoire des chaînes de caractères qui peuvent d'ailleurs prendre beaucoup de place et dépasser la capacité de stockage d'un objet String, par exemple un génome, et d'utiliser un fichier texte .txt
Dans les exercices qui suivent vous seront donnés des fichiers texte qu'il faudra télécharger et mettre dans le répertoire de votre fichier .pde. Ensuite ce fichier sera transformé en tableau de String par la fonction loadStrings() Par exemple dans l'exercice de programmation collective il s'agit de créer une fonction qui dit si une phrase tirée d'un fichier texte est un palindrome.
boolean estPalindrome(String phrase){
}
void setup(){
String[] lignes = loadStrings("palindromes.txt");
for(int i = 0;i < lignes.length;i++){
print(lignes[i]+" : ");
println(estPalindrome(lignes[i]));
}
}
Est donné un fichier texte qui contient un texte chiffré venant du français sans accent et en majuscules
Dans le but de le déchiffrer on veut calculer dans un premier temps les effectifs de chacune des 26 lettres de l'alphabet, puis les fréquences dans un second temps les fréquences des lettres
Télécharger ici le fichier .txtUn palindrome est une phrase que l'on peut lire de la droite vers la gauche ou de la gauche vers la droite et on a les mêmes caractères aux espaces près et aux majuscules près
Par exemple "Esope reste ici et se repose" est un palindrome
Créer une fonction estPalindrome(String Phrase) et qui retourne un boolean.Attention! la chaîne Phrase peut contenir des majuscules et des minuscules mais pas d'accents
Télécharger ici le fichier .txt pour tester la fonction
Conseil: Commencer par écrire un algorithme en français
le chiffrement de César consiste à transformer un message en clair en minuscule en un message codé ou crypté en majuscule, en décalant les lettres toujours d'un même nombre
Par exemple si on décale les lettres de +3 cela signifie que a sera remplacé par D et b par E etc...
Ainsi java sera codé MDYD
(3 points) Construire une fonction chiffrementDecalage(String chaineACrypter,int cle) qui retourne une chaine de caractères (String) la chaine cryptée
(2 points) Créer une fonction testChiffrement() qui appelle chiffrementDecalage() sur un cas simple par exemple String chaine = "java" puis sur le poème suivant où on a remplacé des lettres accentuées par leurs homologues majuscules non accentuées
On transformera donc le texte en minuscules dans un premier temps
On se contentera d'afficher en console le message chiffré en majuscules avec println()
(3 points) Construire une fonction deChiffrementDecalage(String chaineADeCrypter,int cle) qui retourne une chaine de caractères (String) une chaine possible. La chaine en entrée de la fonction est tout en majuscules
(2points)Construire une fonction testDeChiffrement() qui utilise 25 fois la fonction précédente sur la première ligne d'un texte chiffré par décalage et affiche les résultats en console, avec à chaque fois la clé utilisée.
Quelle était la clé ?
Déchiffrer ensuite tout le texte
Télécharger ici le fichier .txt