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