This shows you the differences between two versions of the page.
alf:laboratoare:02_fr_java [2023/03/10 13:11] alexandra.negoita02 created |
alf:laboratoare:02_fr_java [2023/03/14 04:06] (current) alexandra.negoita02 [Assignment] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== TP 2 - Strings et Regex ====== | ====== TP 2 - Strings et Regex ====== | ||
+ | |||
+ | ====== Assignment ====== | ||
+ | <note important> | ||
+ | Vous devez **accepter** l'assignment d'ici est travailler avec ce **repository**: [[https://classroom.github.com/a/NwkWZNIY|Lab 2]] | ||
+ | </note> | ||
===== Strings ===== | ===== Strings ===== | ||
Line 6: | Line 11: | ||
===Fonctions prédéfinies pour le traitement des chaînes=== | ===Fonctions prédéfinies pour le traitement des chaînes=== | ||
- | * //[[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/length|str.length]]// - la longueur de la chaîne | + | * //[[https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#length()|str.length]]// - la longueur d'une chaîne de caractères |
- | * //[[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substring|str.substring (start, end)]]// - retourne un sous-string à partir de la position //start// | + | * //[[https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#charAt(int)|str.charAt(index)]]// - retourne le caractère qui se trouve a la position //index// |
- | * //start// - position de début de sous-string | + | * //[[https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#substring(int,%20int)|str.substring(start, end)]]// - retourne le sous-string à partir de la position //start// jusqu'à la position //end// (si le dernier paramètre manque - jusqu'a le fin du chaine) |
- | * //end// - position de fin de sous-string (optionnel) | + | * //[[https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String)|str.split(regex)]]// - divise le string dans un array avec des éléments séparés correspondant a l'expression reguliere //regex// |
- | * //[[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split|str.split (separator, limit)]]// - divise le string dans un array avec des éléments séparés par //separator// | + | * //[[https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#toUpperCase()|str.toUpperCase()]]// - retourne un nouveau string avec toutes les lettres majuscules |
- | * //separator// - un string avec les caractères séparant les éléments du string original | + | * //[[https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#toLowerCase()|str.toLowerCase()]]// - retourne un nouveau string avec toutes les lettres minuscules |
- | * //limit// - le nombre maximum de divisions (optionnel) | + | * //[[https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#indexOf(int)|str.indexOf(chr)]]// - retourne l'index de la premiere occurence du caractère //chr// |
- | * //[[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toUpperCase|str.toUpperCase ()]]// - retourne un nouveau string avec toutes les lettres majuscules | + | * //[[https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#lastIndexOf(int)|str.lastIndexOf(chr)]]// - retourne l'index de la dernière occurence du caractères //chr// |
- | * //[[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLowerCase|str.toLowerCase ()]]// - retourne un nouveau string avec toutes les lettres minuscules | + | * //[[https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#trim()|str.trim()]]// - on supprime tous les espaces du début et de la fin du string |
- | * //[[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf|str.indexOf (search, index)]]// - retourne la position de la première occurence de la valeur //search// dans un string; | + | * //[[https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#startsWith(java.lang.String)|str.startsWith(search, index)]]// - détermine si une chaîne commence par les caractères de //search// |
- | * //index// est optionnel, il représente la position de début | + | * //[[https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#endsWith(java.lang.String)|str.endsWith(search, index)]]// - détermine si une chaîne se termine par les caractères de //search// |
- | * //[[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/lastIndexOf|str.lastIndexOf (search, index)]]// - retourne la position de la dernière occurence de la valeur //search// dans un string, ou -1; | + | * //[[https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#replace(java.lang.CharSequence,%20java.lang.CharSequence)|str.replace(subStr, newSubStr)]]// - retourne un nouveau string avec //newSubStr// au lieu de //subStr// |
- | * //[[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim|str.trim ()]]// - supprime les espaces du début et de la fin du string; | + | |
- | * //[[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith|str.startsWith (search, position)]]// - retourne une valeur booléenne et vérifie si le string str commence par //search// | + | |
- | * //[[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith|str.endsWith (search, positon)]]// - retourne une valeur booléenne et vérifie si le string str se termine par //search// | + | |
- | * //[[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace|str.replace (subStr, newSubStr)]]// - retourne un string ou //sucStr// est remplacé par //newSubStr// | + | |
- | * //[[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charAt|str.charAt (index)]]// - retourne le caractère de la position //index// | + | |
- | Pour en savoir plus, lisez la [[https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String|documentation complète]]. | + | Pour en savoir plus, lisez la [[https://docs.oracle.com/javase/7/docs/api/java/lang/String.html|documentation complète]]. |
Line 43: | Line 43: | ||
| ( ) | groupe | (abc)+ | | | ( ) | groupe | (abc)+ | | ||
| %% | %% | Ou | a %%|%% b, (ab) %%|%% (ba) | | | %% | %% | Ou | a %%|%% b, (ab) %%|%% (ba) | | ||
- | |||
- | ==== JavaScript ==== | ||
- | ^ Character ^ Description ^ Exemple ^ | ||
| {n} | n fois | a{3} | | | {n} | n fois | a{3} | | ||
| {n,m} | au moins n, au plus m | a{3,7} | | | {n,m} | au moins n, au plus m | a{3,7} | | ||
Line 56: | Line 53: | ||
| ( ) | group | a(ab)a | | | ( ) | group | a(ab)a | | ||
- | Pour déclarer des expressions régulières, on peut écrire de deux façons: | + | Pour déclarer des expressions régulières, on doit declarer les deux classes //Pattern// et //Matcher// qui sont disponibles dans la bibliotheque **java.util.regex**. |
+ | * **Pattern** - Avec les expressions regulieres necessaires; | ||
+ | * **Matcher** - Avec le texte qui on va analyser; | ||
<code javascript> | <code javascript> | ||
+ | import java.util.regex.Matcher; | ||
+ | import java.util.regex.Pattern; | ||
- | // making a new RexEx object the standard way | + | public class Main { |
- | let regex: RegExp = new RegEx ("[0-9]+"); | + | public static void main(String[] args) { |
- | + | Pattern pattern = Pattern.compile("hello", Pattern.CASE_INSENSITIVE); | |
- | // making a new RegEx object using a shortcut | + | Matcher matcher = pattern.matcher("Hello World!"); |
- | let regex: RegExp = /[0-9]+/; | + | boolean matchFound = matcher.find(); |
+ | if(matchFound) { | ||
+ | System.out.println("Match found"); | ||
+ | } else { | ||
+ | System.out.println("Match not found"); | ||
+ | } | ||
+ | } | ||
+ | } | ||
</code> | </code> | ||
+ | |||
+ | Voir aussi la documentation des classes: [[https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html|Pattern]], et [[https://docs.oracle.com/javase/7/docs/api/java/util/regex/Matcher.html|Matcher]]. | ||
==== Fonctions supplémentaires ==== | ==== Fonctions supplémentaires ==== | ||
- | === String === | + | === Fonctions pour les chaînes de caractères avec Regex === |
- | * //[[https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/split|str.split(separatorRegex, limit)]]// - divise le string dans un array avec des éléments séparés //separatorRegex// | + | * //[[https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String)|str.split(regex)]]// - divise le string dans un array avec des éléments séparés par le separateur//regex// |
- | * //[[https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/match|str.match(regex)]]// - Recherche dans le string une sous-string qui suit l'expression régulière | + | * //[[https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#matches(java.lang.String)|str.matches(regex)]]// - Indique si le chaîne de caracteres correspond ou non à l'expression régulière donnée. |
- | * //[[https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/search|str.search(regex)]]// - Recherche une sous-string qui correspond à l'expression régulière et renvoie l'index de celle-ci ou -1 si elle ne la trouve pas. | + | |
- | === Fonctions pour les RegEx === | ||
- | |||
- | * //[[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec|regex.exec(str)]]// - Recherche dans un string une sous-string qui suit l'expression régulière | ||
- | <code javascript> | ||
- | let regex: RegExp = /([0-9]+);([A-Za-z-\. ]+);([0-9]{3,4}[A-Za-z]+)/; | ||
- | |||
- | let match: RegExpExecArray|null = regex.exec ('1;ANDRONIE S. Manuela - Bianca;1220F extra text'); | ||
- | |||
- | /* | ||
- | match: | ||
- | [ '1;ANDRONIE S. Manuela - Bianca;1220F', // the full match | ||
- | '1', // the first group | ||
- | 'ANDRONIE S. Manuela - Bianca', // the second group | ||
- | '1220F', // the third group | ||
- | index: 0, // the position | ||
- | input: '1;ANDRONIE S. Manuela - Bianca;1220F extra text' ] // the full string | ||
- | */ | ||
- | |||
- | </code> | ||
- | * //[[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test|regex.test(str)]]// - Recherche dans une chaîne une sous-chaîne qui suit l'expression régulière et renvoie true de celle-ci trouve un ou false sinon | ||
- | |||
- | Pour plus de fonctions, lisez la [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp|documentation RegEx complète]]. | ||
Line 103: | Line 89: | ||
Fichiers de groups: | Fichiers de groups: | ||
- | - Téléchargez depuis le github le fichier [[https://github.com/UPB-FILS-ALF/TP/blob/main/TP2/BusinessFinancialData.csv|BusinessFinancialData.csv]] qui contient des données financières d'entreprise. Dans ce document on a stocké le code de l'entreprise, la période de temps, la valeur totale, le sujet, la catégorie et le domaine d'activité (dans cette ordre précisément). Créez un projet nodejs et copiez dans une chaîne seulement la ligne numéro 3. Sans utiliser des expressions régulières, résolvez les demandes suivantes (seulement a l'aide des **fonctions pour les strings**): | + | - Téléchargez depuis le github le fichier [[https://github.com/UPB-FILS-ALF/TP/blob/main/TP2/BusinessFinancialData.csv|BusinessFinancialData.csv]] qui contient des données financières d'entreprise. Dans ce document on a stocké le code de l'entreprise, la période de temps, la valeur totale, le sujet, la catégorie et le domaine d'activité (dans cette ordre précisément). Créez un projet Java et copiez dans une chaîne seulement la ligne numéro 3. Sans utiliser des expressions régulières, résolvez les demandes suivantes (seulement a l'aide des **fonctions pour les strings**): |
- Affichez la position (index) du sujet dans le string. (**0.2p**) | - Affichez la position (index) du sujet dans le string. (**0.2p**) | ||
- Affichez la dernière position de " " (\s) dans la chaîne. (**0.4p**) | - Affichez la dernière position de " " (\s) dans la chaîne. (**0.4p**) | ||
Line 110: | Line 96: | ||
- Divisez la chaîne dans un tableau en utilisant le caractère de nouvelle ligne (\n) comme séparateur (//\r\n// pour Windows). (**0.4p**) | - Divisez la chaîne dans un tableau en utilisant le caractère de nouvelle ligne (\n) comme séparateur (//\r\n// pour Windows). (**0.4p**) | ||
- Traitez chaque string du tableau et affichez sur des lignes différentes le code, la valeur totale et la catégorie de chaque entreprise qui est dans le fichier. (**0.6p**) | - Traitez chaque string du tableau et affichez sur des lignes différentes le code, la valeur totale et la catégorie de chaque entreprise qui est dans le fichier. (**0.6p**) | ||
- | - Pour chaque ligne de l'exercice 2, créez un objet de type Entreprise avec les détails de celle-ci. La méthode reste a votre choix. Ajoutez les objects dans un tableau. (**1p**) | + | - Pour chaque ligne de l'exercice 2, créez une classe Entreprise avec les détails de celle-ci. La méthode de creer les objets reste a votre choix. Ajoutez les objects dans un tableau. (**1p**) |
- | - Téléchargez le fichier [[https://github.com/UPB-FILS-ALF/TP/blob/main/TP2/passwd|passwd]] et lisez-le dans un string. Créez un tableau avec des objets contenant les informations comprises dans le fichier, pour chaque ligne. Vous pouvez trouver des détails sur le format du fichier [[https://github.com/UPB-FILS-ALF/TP/blob/main/TP2/passwd|passwd]] ici. (**1p**) | + | - Téléchargez le fichier [[https://github.com/UPB-FILS-ALF/TP/blob/main/TP2/passwd|passwd]] et lisez-le dans un string. Créez un tableau avec des objets contenant les informations comprises dans le fichier, pour chaque ligne. Vous pouvez trouver des détails sur le format du fichier [[https://www.ibm.com/docs/en/aix/7.2?topic=passwords-using-etcpasswd-file|passwd]] ici. (**1p**) |
- Utilisez des expressions régulières pour résoudre l'exercice 2. Vous pouvez utiliser [[https://regex101.com|RegEx101]] pour écrire l'expression régulière et tester sa validité. (**1p**) | - Utilisez des expressions régulières pour résoudre l'exercice 2. Vous pouvez utiliser [[https://regex101.com|RegEx101]] pour écrire l'expression régulière et tester sa validité. (**1p**) | ||
- Utilisez des expressions régulières pour résoudre l'exercice 3. (**1.5p**) | - Utilisez des expressions régulières pour résoudre l'exercice 3. (**1.5p**) | ||
- Utilisez des expressions régulières pour résoudre l'exercice 4. (**1.5p**) | - Utilisez des expressions régulières pour résoudre l'exercice 4. (**1.5p**) | ||
- | - Lisez le fichier [[https://github.com/UPB-FILS-ALF/TP/blob/main/TP2/typescript_errors.txt|typescript_errors]] et affichez: | + | - **Bonus**: Ecrivez un programme qui reçoit comme paramètre le fichier [[https://github.com/UPB-FILS-ALF/TP/blob/main/TP2/typescript_class.ts|typescript_class.ts]]. Lisez le fichier et résolvez les demandes suivantes: |
- | - combien d'erreurs y a-t-il (**0.5p**) | + | |
- | - le liste de codes d'erreur (**0.5p**) | + | |
- | - Stockez les informations dans un tableau ayant le format suivant: (**0.5p**)<code json> | + | |
- | [ | + | |
- | { | + | |
- | "type":"error", | + | |
- | "code":<erorr_code if it exists>, | + | |
- | "type_error":<true/false>, //s'il s'agit d'une erreur de type | + | |
- | "description":<the error description> | + | |
- | }, | + | |
- | ... | + | |
- | ] | + | |
- | </code> | + | |
- | - Ecrivez le tableau dans un fichier (indice: utilisez JSON.stringify) (**0.5p**) | + | |
- | - **Bonus**: Ecrivez un programme qui reçoit comme paramètre le fichier [[https://github.com/UPB-FILS-ALF/TP/blob/main/TP2/typescript_class.ts|typescript_class.ts]]. Lisez le fichier et résolvez les demandes suivantes: | + | |
- affichez les bibliothèques importées (**0.3p**) | - affichez les bibliothèques importées (**0.3p**) | ||
- affichez toutes les classes déclarées (**0.3p**) | - affichez toutes les classes déclarées (**0.3p**) |