Haskell Language
Data.Text
Recherche…
Remarques
Text
est une alternative plus efficace au type de String
standard d'Haskell. String
est définie comme une liste liée de caractères dans le Prélude standard, conformément au rapport Haskell :
type String = [Char]
Text
est représenté sous la forme d'un tableau condensé de caractères Unicode. Ceci est similaire à la façon dont la plupart des langages de haut niveau représentent des chaînes et offre une efficacité en termes de temps et d'espace bien supérieure à celle de la version de liste.
Text
doit être préféré à String
pour toute utilisation en production. Une exception notable dépend d'une bibliothèque qui possède une API String
, mais même dans ce cas, il peut être avantageux d'utiliser Text
interne et de le convertir en String
juste avant d'interfacer avec la bibliothèque.
Tous les exemples de cette rubrique utilisent l'extension de langue OverloadedStrings
.
Littéraux de texte
L'extension de langage OverloadedStrings
permet d'utiliser des littéraux de chaîne normaux pour représenter des valeurs Text
.
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T
myText :: T.Text
myText = "overloaded"
Supprimer les espaces
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T
myText :: T.Text
myText = "\n\r\t leading and trailing whitespace \t\r\n"
strip
supprime les espaces au début et à la fin d'une valeur de Text
.
ghci> T.strip myText
"leading and trailing whitespace"
stripStart
supprime les espaces que depuis le début.
ghci> T.stripStart myText
"leading and trailing whitespace \t\r\n"
stripEnd
supprime uniquement les espaces à partir de la fin.
ghci> T.stripEnd myText
"\n\r\t leading and trailing whitespace"
filter
peut être utilisé pour supprimer des espaces ou d'autres caractères du milieu.
ghci> T.filter /=' ' "spaces in the middle of a text string"
"spacesinthemiddleofatextstring"
Fractionnement des valeurs de texte
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T
myText :: T.Text
myText = "mississippi"
splitOn
décompose un Text
en une liste de Texts
sur les occurrences d'une sous-chaîne.
ghci> T.splitOn "ss" myText
["mi","i","ippi"]
splitOn
est l'inverse de l' intercalate
.
ghci> intercalate "ss" (splitOn "ss" "mississippi")
"mississippi"
split
divise une valeur Text
en morceaux sur des caractères satisfaisant un prédicat booléen.
ghci> T.split (== 'i') myText
["m","ss","ss","pp",""]
Texte codant et décodé
Les fonctions d'encodage et de décodage pour divers codages Unicode sont disponibles dans le module Data.Text.Encoding
.
ghci> import Data.Text.Encoding
ghci> decodeUtf8 (encodeUtf8 "my text")
"my text"
Notez que decodeUtf8
lancera une exception sur une entrée non valide. Si vous voulez gérer vous-même un UTF-8 non valide, utilisez decodeUtf8With
.
ghci> decodeUtf8With (\errorDescription input -> Nothing) messyOutsideData
Vérifier si un texte est une sous-chaîne d'un autre texte
ghci> :set -XOverloadedStrings
ghci> import Data.Text as T
isInfixOf :: Text -> Text -> Bool
vérifie si un Text
est contenu n'importe où dans un autre Text
.
ghci> "rum" `T.isInfixOf` "crumble"
True
isPrefixOf :: Text -> Text -> Bool
vérifie si un Text
apparaît au début d'un autre Text
.
ghci> "crumb" `T.isPrefixOf` "crumble"
True
isSuffixOf :: Text -> Text -> Bool
vérifie si un Text
apparaît à la fin d'un autre Text
.
ghci> "rumble" `T.isSuffixOf` "crumble"
True
Texte d'indexation
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T
myText :: T.Text
myText = "mississippi"
Les caractères à des indices spécifiques peuvent être renvoyés par la fonction d' index
.
ghci> T.index myText 2
's'
La fonction findIndex
prend une fonction de type (Char -> Bool)
et Text et renvoie l'index de la première occurrence d'une chaîne donnée ou Nothing si cela ne se produit pas.
ghci> T.findIndex ('s'==) myText
Just 2
ghci> T.findIndex ('c'==) myText
Nothing
La fonction count
renvoie le nombre de fois qu'un Text
requête apparaît dans un autre Text
.
ghci> count ("miss"::T.Text) myText
1