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


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow