En Elm, les caractères et les chaînes de caractères constituent la base de la représentation du texte.
On peut voir une chaîne de caractères comme un tableau de caractères, et la plupart des fonctions de List ont leur équivalent dans le module String.
Le type Char représente un seul caractère unicode, entouré d'apostrophes, par exemple 'a'.
Le module Char fournit des fonctions de prédicat (Char -> Bool) pour tester les propriétés d'un caractère : isUpper, isLower, isAlpha et isAlphaNum
Le module fournit aussi des fonctions pour convertir un caractère avec toUpper, toLower, toLocaleUpper et toLocaleLower, ainsi que pour obtenir sa valeur unicode numérique (Int) ou la reconvertir en caractère, avec toCode et fromCode.
Le type String fournit une représentation intégrée pour manipuler efficacement les chaînes de caractères et peut représenter n'importe quelle séquence de caractères unicode, par exemple "this is an Elm string."
Les chaînes multilignes sont représentées par des triples guillemets doubles et peuvent contenir des guillemets et des retours à la ligne non échappés.
"""
This is a multiline string.
All line-breaks and whitespace,
are preserved.
"""
Le module String contient toutes les fonctions résumées dans le tableau ci-dessous.
Parmi les fonctions les plus couramment utilisées, on trouve :
cons : Char -> String -> String ajoute un caractère au début d'une string.
cons 'T' "he truth is out there"
--> "The truth is out there"
(++): String -> String -> String ajoute deux strings bout à bout.
"butter" ++ "fly"
--> "butterfly"
split : String -> String -> List String découpe une string en un tableau de strings au niveau du séparateur donné.
split ";" "cat;dog;cow"
--> ["cat", "dog", "cow"]
join : String -> List String -> String concatène un tableau de strings avec un séparateur donné.
join "a" ["H", "w", "ii", "n"]
--> "Hawaiian"
replace : String -> String -> String -> String remplace toutes les occurrences d'une sous-chaîne donnée.
replace "Hello" "Goodbye cruel" "Hello world."
--> "Goodbye cruel world."
length : String -> Int renvoie le nombre de caractères d'une string.
length "Hello world."
--> 12
toInt : String -> Maybe Int essaie de convertir une string en Just Int, et renvoie Nothing quand le format de la string est incorrect.
toInt "-42"
--> Just -42
contains : String -> String -> Bool vérifie si la deuxième string contient la première.
contains "the" "theory"
--> True
map : (Char -> Char) -> String -> String applique une fonction donnée à chaque Char de la string.
À noter que la fonction fournie doit être une correspondance de Char vers Char.
map (\c -> if c == '/' then '.' else c) "a/b/c"
--> "a.b.c"
String :| Manipuler | Sous-chaînes | Vérifier | Convertir | Ordre supérieur |
|---|---|---|---|---|
reverse |
slice |
length |
toInt |
map |
repeat |
left |
isEmpty |
fromInt |
filter |
replace |
right |
contains |
toFloat |
foldl |
append |
dropLeft |
startsWith |
fromFloat |
foldr |
concat |
dropRight |
indexes |
toList |
any |
split |
fromList |
all |
||
join |
fromChar |
|||
words |
||||
lines |
||||
cons |
||||
uncons |
Dans cet exercice, tu vas implémenter un ensemble partiel de fonctions utilitaires pour aider un développeur à nettoyer des noms d'identifiants.
Au fil des 5 tâches, tu vas construire progressivement la fonction clean.
Un identifiant valide comprend zéro ou plusieurs lettres et tirets bas.
Si l'on passe une string vide à la fonction clean, celle-ci doit renvoyer une string vide.
Implémente une fonction clean1 qui remplace tous les espaces par des tirets bas. Cela vaut aussi pour les espaces au début et à la fin.
clean1 "my Id"
--> "my___Id"
Implémente clean2 pour qu'elle fasse tout ce que fait la fonction précédente et qu'elle remplace les caractères de contrôle courants (\n, \t et \r ) par la string "[CTRL]".
clean2 "my\nId"
--> "my[CTRL]Id",
kebab-case en camelCase
Implémente clean3 pour qu'elle fasse tout ce que fait la fonction précédente et qu'elle convertisse le kebab-case en camelCase.
clean3 "à-ḃç"
--> "àḂç"
Implémente clean4 pour qu'elle fasse tout ce que fait la fonction précédente et qu'elle omette tous les chiffres.
clean4 "123"
--> ""
Pour finir, implémente clean pour qu'elle fasse tout ce que fait la fonction précédente et qu'elle omette toute lettre grecque comprise entre 'α' et 'ω'.
clean "My Οβιεγτ Finder"
--> "My_Ο_Finder"
Inscris-toi sur Exercism pour apprendre et maîtriser Elm avec 28 concepts110 exercices, et un vrai mentorat humain, le tout gratuitement.