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