Haskell Language
Data.Text
Sök…
Anmärkningar
Text
är ett effektivare alternativ till Haskell standard String
typ. String
definieras som en länkad lista med tecken i standardförspel, enligt Haskell-rapporten :
type String = [Char]
Text
representeras som ett packat antal Unicode-tecken. Detta liknar hur de flesta andra högnivåspråk representerar strängar och ger mycket bättre tid och rymdeffektivitet än listversionen.
Text
bör föredras framför String
för all produktionsanvändning. Ett anmärkningsvärt undantag beror på ett bibliotek som har ett String
API, men även i så fall kan det vara en fördel med att använda Text
internt och konvertera till en String
precis innan gränssnittet med biblioteket.
Alla exemplen i detta ämne använder språkförlängningen OverloadedStrings
.
Textbokstäver
Med språkförlängningen OverloadedStrings
kan användningen av normala strängbokstäver stå för Text
.
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T
myText :: T.Text
myText = "overloaded"
Avrivande mellanrum
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T
myText :: T.Text
myText = "\n\r\t leading and trailing whitespace \t\r\n"
strip
tar bort mellanrum från början och slutet av ett Text
.
ghci> T.strip myText
"leading and trailing whitespace"
stripStart
tar bort rymden endast från början.
ghci> T.stripStart myText
"leading and trailing whitespace \t\r\n"
stripEnd
tar bort mellanrum bara från slutet.
ghci> T.stripEnd myText
"\n\r\t leading and trailing whitespace"
filter
kan användas för att ta bort blanksteg eller andra tecken från mitten.
ghci> T.filter /=' ' "spaces in the middle of a text string"
"spacesinthemiddleofatextstring"
Dela upp textvärden
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T
myText :: T.Text
myText = "mississippi"
splitOn
bryter en Text
upp i en lista över Texts
om förekomster av en substring.
ghci> T.splitOn "ss" myText
["mi","i","ippi"]
splitOn
är det inverse av intercalate
.
ghci> intercalate "ss" (splitOn "ss" "mississippi")
"mississippi"
split
ett Text
i bitar på tecken som uppfyller ett booleskt predikat.
ghci> T.split (== 'i') myText
["m","ss","ss","pp",""]
Kodning och avkodningstext
Kodnings- och avkodningsfunktioner för olika Unicode-kodningar finns i modulen Data.Text.Encoding
.
ghci> import Data.Text.Encoding
ghci> decodeUtf8 (encodeUtf8 "my text")
"my text"
Observera att decodeUtf8
kommer att kasta ett undantag på ogiltig ingång. Om du vill hantera ogiltiga UTF-8 själv, använd decodeUtf8With
.
ghci> decodeUtf8With (\errorDescription input -> Nothing) messyOutsideData
Kontrollera om en text är en substring av en annan text
ghci> :set -XOverloadedStrings
ghci> import Data.Text as T
isInfixOf :: Text -> Text -> Bool
kontrollerar om en Text
finns någonstans i en annan Text
.
ghci> "rum" `T.isInfixOf` "crumble"
True
isPrefixOf :: Text -> Text -> Bool
kontrollerar om en Text
visas i början av en annan Text
.
ghci> "crumb" `T.isPrefixOf` "crumble"
True
isSuffixOf :: Text -> Text -> Bool
kontrollerar om en Text
visas i slutet av en annan Text
.
ghci> "rumble" `T.isSuffixOf` "crumble"
True
Indexera text
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T
myText :: T.Text
myText = "mississippi"
Tecken på specifika index kan returneras med index
.
ghci> T.index myText 2
's'
findIndex
funktionen tar en funktion av typen (Char -> Bool)
och Text och returnerar indexet för den första förekomsten av en given sträng eller ingenting om den inte inträffar.
ghci> T.findIndex ('s'==) myText
Just 2
ghci> T.findIndex ('c'==) myText
Nothing
count
returnerar antalet gånger en fråga Text
inträffar i en annan Text
.
ghci> count ("miss"::T.Text) myText
1