Haskell Language
Data.Text
Buscar..
Observaciones
Text
es una alternativa más eficiente al tipo de String
estándar de Haskell. String
se define como una lista enlazada de caracteres en el Preludio estándar, según el Informe Haskell :
type String = [Char]
Text
se representa como una matriz empaquetada de caracteres Unicode. Esto es similar a cómo la mayoría de los otros lenguajes de alto nivel representan cadenas, y ofrece una eficiencia de tiempo y espacio mucho mejor que la versión de lista.
Text
debe ser preferido sobre la String
para todo el uso de producción. Una excepción notable depende de una biblioteca que tenga una API de String
, pero incluso en ese caso puede ser beneficioso utilizar el Text
internamente y convertirlo a una String
justo antes de interactuar con la biblioteca.
Todos los ejemplos en este tema usan la extensión de lenguaje OverloadedStrings
.
Literales de texto
La extensión de lenguaje OverloadedStrings
permite el uso de literales de cadena normales para representar valores de Text
.
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T
myText :: T.Text
myText = "overloaded"
Eliminar espacios en blanco
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T
myText :: T.Text
myText = "\n\r\t leading and trailing whitespace \t\r\n"
strip
elimina los espacios en blanco desde el inicio y el final de un valor de Text
.
ghci> T.strip myText
"leading and trailing whitespace"
stripStart
elimina los espacios en blanco solo desde el principio.
ghci> T.stripStart myText
"leading and trailing whitespace \t\r\n"
stripEnd
elimina los espacios en blanco sólo desde el final.
ghci> T.stripEnd myText
"\n\r\t leading and trailing whitespace"
filter
se puede usar para eliminar espacios en blanco u otros caracteres del medio.
ghci> T.filter /=' ' "spaces in the middle of a text string"
"spacesinthemiddleofatextstring"
Dividir valores de texto
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T
myText :: T.Text
myText = "mississippi"
splitOn
divide un Text
en una lista de Texts
sobre las ocurrencias de una subcadena.
ghci> T.splitOn "ss" myText
["mi","i","ippi"]
splitOn
es el inverso de intercalate
.
ghci> intercalate "ss" (splitOn "ss" "mississippi")
"mississippi"
split
divide un valor de Text
en partes en caracteres que satisfacen un predicado booleano.
ghci> T.split (== 'i') myText
["m","ss","ss","pp",""]
Codificación y decodificación de texto
Las funciones de codificación y decodificación para una variedad de codificaciones Unicode se pueden encontrar en el módulo Data.Text.Encoding
.
ghci> import Data.Text.Encoding
ghci> decodeUtf8 (encodeUtf8 "my text")
"my text"
Tenga en cuenta que decodeUtf8
lanzará una excepción en la entrada no válida. Si quiere manejar usted mismo el UTF-8 no válido, use decodeUtf8With
.
ghci> decodeUtf8With (\errorDescription input -> Nothing) messyOutsideData
Comprobando si un texto es una subcadena de otro texto
ghci> :set -XOverloadedStrings
ghci> import Data.Text as T
isInfixOf :: Text -> Text -> Bool
comprueba si un Text
está contenido en algún lugar dentro de otro Text
.
ghci> "rum" `T.isInfixOf` "crumble"
True
isPrefixOf :: Text -> Text -> Bool
comprueba si un Text
aparece al principio de otro Text
.
ghci> "crumb" `T.isPrefixOf` "crumble"
True
isSuffixOf :: Text -> Text -> Bool
comprueba si un Text
aparece al final de otro Text
.
ghci> "rumble" `T.isSuffixOf` "crumble"
True
Texto de indexación
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T
myText :: T.Text
myText = "mississippi"
Los caracteres en índices específicos pueden ser devueltos por la función de index
.
ghci> T.index myText 2
's'
La función findIndex
toma una función de tipo (Char -> Bool)
y Text y devuelve el índice de la primera aparición de una cadena dada o Nothing si no ocurre.
ghci> T.findIndex ('s'==) myText
Just 2
ghci> T.findIndex ('c'==) myText
Nothing
La función de count
devuelve el número de veces que se produce un Text
consulta dentro de otro Text
.
ghci> count ("miss"::T.Text) myText
1