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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow