Ricerca…


Osservazioni

Text è un'alternativa più efficiente al tipo di String standard di Haskell. String è definita come un elenco di caratteri collegati nel Preludio standard, secondo il rapporto Haskell :

type String = [Char]

Text è rappresentato come un array compresso di caratteri Unicode. Questo è simile al modo in cui la maggior parte degli altri linguaggi di alto livello rappresentano stringhe e offre un'efficienza di tempo e spazio molto migliore rispetto alla versione di elenco.

Text deve essere preferito alla String per tutto l'utilizzo di produzione. Un'eccezione notevole dipende dalla libreria che ha un'API String , ma anche in questo caso potrebbe esserci un vantaggio nell'usare il Text internamente e la conversione in una String prima di interfacciare la libreria.

Tutti gli esempi in questo argomento utilizzano l'estensione di lingua OverloadedStrings .

Letterali testuali

L'estensione del linguaggio OverloadedStrings consente l'utilizzo di normali string letterali per i valori di Text .

{-# LANGUAGE OverloadedStrings #-}

import qualified Data.Text as T

myText :: T.Text
myText = "overloaded"

Spogliatura degli spazi bianchi

{-# LANGUAGE OverloadedStrings #-}

import qualified Data.Text as T

myText :: T.Text
myText = "\n\r\t   leading and trailing whitespace   \t\r\n"

strip rimuove gli spazi bianchi dall'inizio e alla fine di un valore di Text .

ghci> T.strip myText
"leading and trailing whitespace"

stripStart rimuove gli spazi solo dall'inizio.

ghci> T.stripStart myText
"leading and trailing whitespace   \t\r\n"

stripEnd rimuove gli spazi solo dalla fine.

ghci> T.stripEnd myText
"\n\r\t   leading and trailing whitespace"

filter può essere usato per rimuovere spazi bianchi, o altri personaggi, dal centro.

ghci> T.filter /=' ' "spaces in the middle of a text string"
"spacesinthemiddleofatextstring"

Divisione dei valori di testo

{-# LANGUAGE OverloadedStrings #-}

import qualified Data.Text as T

myText :: T.Text
myText = "mississippi"

splitOn suddivide un Text in un elenco di Texts sulle occorrenze di una sottostringa.

ghci> T.splitOn "ss" myText
["mi","i","ippi"]

splitOn è l'inverso di intercalate .

ghci> intercalate "ss" (splitOn "ss" "mississippi")
"mississippi"

split suddivide un valore di Text in blocchi su caratteri che soddisfano un predicato booleano.

ghci> T.split (== 'i') myText
["m","ss","ss","pp",""]

Testo di codifica e decodifica

Le funzioni di codifica e decodifica per una varietà di codifiche Unicode sono disponibili nel modulo Data.Text.Encoding .

ghci> import Data.Text.Encoding
ghci> decodeUtf8 (encodeUtf8 "my text")
"my text"

Si noti che decodeUtf8 genererà un'eccezione sull'input non valido. Se si desidera gestire da soli l'UTF-8 non valido, utilizzare decodeUtf8With .

ghci> decodeUtf8With (\errorDescription input -> Nothing) messyOutsideData

Verifica se un testo è una sottostringa di un altro testo

ghci> :set -XOverloadedStrings
ghci> import Data.Text as T

isInfixOf :: Text -> Text -> Bool controlla se un Text è contenuto ovunque all'interno di un altro Text .

ghci> "rum" `T.isInfixOf` "crumble"
True

isPrefixOf :: Text -> Text -> Bool controlla se un Text appare all'inizio di un altro Text .

ghci> "crumb" `T.isPrefixOf` "crumble"
True

isSuffixOf :: Text -> Text -> Bool controlla se un Text appare alla fine di un altro Text .

ghci> "rumble" `T.isSuffixOf` "crumble"
True

Indicizzazione del testo

{-# LANGUAGE OverloadedStrings #-}

import qualified Data.Text as T

myText :: T.Text

myText = "mississippi"

I caratteri su indici specifici possono essere restituiti dalla funzione index .

ghci> T.index myText 2
's'

La funzione findIndex accetta una funzione di tipo (Char -> Bool) e Text e restituisce l'indice della prima occorrenza di una determinata stringa o Nothing se non si verifica.

ghci> T.findIndex ('s'==) myText
Just 2
ghci> T.findIndex ('c'==) myText
Nothing

Il count funzione restituisce il numero di volte che una query Text si verifica all'interno di un altro Text .

ghci> count ("miss"::T.Text) myText
1


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow