Haskell Language
data.text
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