Haskell Language
data.text
Zoeken…
Opmerkingen
Text
is een efficiënter alternatief voor het standaard String
type van Haskell. String
wordt gedefinieerd als een gekoppelde lijst met tekens in de standaard Prelude, volgens het Haskell-rapport :
type String = [Char]
Text
wordt weergegeven als een ingepakte reeks Unicode-tekens. Dit is vergelijkbaar met de manier waarop de meeste andere talen op hoog niveau tekenreeksen vertegenwoordigen en biedt een veel betere tijd- en ruimte-efficiëntie dan de lijstversie.
Text
moet de voorkeur hebben boven String
voor al het productiegebruik. Een opmerkelijke uitzondering is afhankelijk van een bibliotheek die een String
API heeft, maar zelfs in dat geval kan het een voordeel zijn om Text
intern te gebruiken en naar een String
converteren net voordat deze met de bibliotheek wordt gekoppeld.
Alle voorbeelden in dit onderwerp gebruiken de OverloadedStrings
.
Tekstliteralen
De OverloadedStrings
extensie taal maakt het gebruik van normale letterlijke tekenreeksen voor te staan Text
waarden.
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T
myText :: T.Text
myText = "overloaded"
Witruimte verwijderen
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T
myText :: T.Text
myText = "\n\r\t leading and trailing whitespace \t\r\n"
strip
verwijdert witruimte vanaf het begin en einde van een Text
.
ghci> T.strip myText
"leading and trailing whitespace"
stripStart
verwijdert alleen witruimte vanaf het begin.
ghci> T.stripStart myText
"leading and trailing whitespace \t\r\n"
stripEnd
verwijdert alleen witruimte vanaf het einde.
ghci> T.stripEnd myText
"\n\r\t leading and trailing whitespace"
filter
kan worden gebruikt om witruimte of andere tekens uit het midden te verwijderen.
ghci> T.filter /=' ' "spaces in the middle of a text string"
"spacesinthemiddleofatextstring"
Tekstwaarden splitsen
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T
myText :: T.Text
myText = "mississippi"
splitOn
splitst een Text
op in een lijst met Texts
over gevallen van een substring.
ghci> T.splitOn "ss" myText
["mi","i","ippi"]
splitOn
is het omgekeerde van intercalate
.
ghci> intercalate "ss" (splitOn "ss" "mississippi")
"mississippi"
split
breekt een Text
in delen van tekens die voldoen aan een Booleaans predicaat.
ghci> T.split (== 'i') myText
["m","ss","ss","pp",""]
Tekst coderen en decoderen
Coderings- en decoderingsfuncties voor verschillende Unicode-coderingen zijn te vinden in de Data.Text.Encoding
module.
ghci> import Data.Text.Encoding
ghci> decodeUtf8 (encodeUtf8 "my text")
"my text"
Merk op dat decodeUtf8
een uitzondering decodeUtf8
voor ongeldige invoer. Als u zelf ongeldige UTF-8 wilt afhandelen, gebruikt u decodeUtf8With
.
ghci> decodeUtf8With (\errorDescription input -> Nothing) messyOutsideData
Controleren of een tekst een substring is van een andere tekst
ghci> :set -XOverloadedStrings
ghci> import Data.Text as T
isInfixOf :: Text -> Text -> Bool
controleert of een Text
ergens in een andere Text
.
ghci> "rum" `T.isInfixOf` "crumble"
True
isPrefixOf :: Text -> Text -> Bool
controleert of een Text
aan het begin van een andere Text
.
ghci> "crumb" `T.isPrefixOf` "crumble"
True
isSuffixOf :: Text -> Text -> Bool
controleert of een Text
aan het einde van een andere Text
.
ghci> "rumble" `T.isSuffixOf` "crumble"
True
Tekst indexeren
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T
myText :: T.Text
myText = "mississippi"
Tekens op specifieke indexen kunnen worden geretourneerd door de index
.
ghci> T.index myText 2
's'
De functie findIndex
heeft de functie type (Char -> Bool)
en Text en retourneert de index van de eerste keer dat een bepaalde string voorkomt of niets als deze niet voorkomt.
ghci> T.findIndex ('s'==) myText
Just 2
ghci> T.findIndex ('c'==) myText
Nothing
De count
functie geeft het aantal keren dat een query Text
plaatsvindt binnen een andere Text
.
ghci> count ("miss"::T.Text) myText
1