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


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow