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


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow