Haskell Language
Daten.Text
Suche…
Bemerkungen
Text
ist eine effizientere Alternative zum Standard- String
Typ von Haskell. String
wird als verknüpfte Liste von Zeichen im Standard-Prelude gemäß dem Haskell-Bericht definiert :
type String = [Char]
Text
wird als gepacktes Array von Unicode-Zeichen dargestellt. Dies ist vergleichbar mit der Darstellung der meisten anderen Hochsprachen in Strings und bietet eine viel bessere Zeit- und Platzeffizienz als die Listenversion.
Text
sollte für alle Produktionszwecke gegenüber String
bevorzugt werden. Eine bemerkenswerte Ausnahme hängt von einer Bibliothek ab, die über eine String
API verfügt. In diesem Fall kann es jedoch vorteilhaft sein, Text
intern zu verwenden und unmittelbar vor dem Herstellen einer Schnittstelle mit der Bibliothek in einen String
konvertieren.
Alle Beispiele in diesem Thema verwenden die Spracherweiterung OverloadedStrings
.
Textliterale
Die OverloadedStrings
Spracherweiterung ermöglicht die Verwendung von normalen Stringliterale für stehen Text
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T
myText :: T.Text
myText = "overloaded"
Leerzeichen entfernen
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T
myText :: T.Text
myText = "\n\r\t leading and trailing whitespace \t\r\n"
strip
entfernt Leerzeichen vom Anfang und Ende eines Text
.
ghci> T.strip myText
"leading and trailing whitespace"
stripStart
entfernt Leerzeichen nur von Anfang an.
ghci> T.stripStart myText
"leading and trailing whitespace \t\r\n"
stripEnd
entfernt Leerzeichen nur am Ende.
ghci> T.stripEnd myText
"\n\r\t leading and trailing whitespace"
filter
können Leerzeichen oder andere Zeichen aus der Mitte entfernt werden.
ghci> T.filter /=' ' "spaces in the middle of a text string"
"spacesinthemiddleofatextstring"
Textwerte aufteilen
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T
myText :: T.Text
myText = "mississippi"
splitOn
zerlegt einen Text
in eine Liste von Texts
beim Auftreten eines Teilstrings.
ghci> T.splitOn "ss" myText
["mi","i","ippi"]
splitOn
ist die Umkehrung von intercalate
.
ghci> intercalate "ss" (splitOn "ss" "mississippi")
"mississippi"
split
zerlegt einen Text
in Blöcke von Zeichen, die ein boolesches Prädikat erfüllen
ghci> T.split (== 'i') myText
["m","ss","ss","pp",""]
Kodieren und Dekodieren von Text
Kodierungs- und Dekodierungsfunktionen für verschiedene Unicode-Kodierungen finden Sie im Modul Data.Text.Encoding
.
ghci> import Data.Text.Encoding
ghci> decodeUtf8 (encodeUtf8 "my text")
"my text"
Beachten Sie, dass decodeUtf8
bei ungültiger Eingabe eine Ausnahme decodeUtf8
. Wenn Sie mit ungültigem UTF-8 selbst arbeiten decodeUtf8With
, verwenden Sie decodeUtf8With
.
ghci> decodeUtf8With (\errorDescription input -> Nothing) messyOutsideData
Prüfen, ob ein Text eine Unterzeichenfolge eines anderen Texts ist
ghci> :set -XOverloadedStrings
ghci> import Data.Text as T
isInfixOf :: Text -> Text -> Bool
prüft, ob ein Text
irgendwo in einem anderen Text
.
ghci> "rum" `T.isInfixOf` "crumble"
True
isPrefixOf :: Text -> Text -> Bool
prüft, ob ein Text
am Anfang eines anderen Text
angezeigt wird.
ghci> "crumb" `T.isPrefixOf` "crumble"
True
isSuffixOf :: Text -> Text -> Bool
prüft, ob ein Text
am Ende eines anderen Text
angezeigt wird.
ghci> "rumble" `T.isSuffixOf` "crumble"
True
Text indizieren
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T
myText :: T.Text
myText = "mississippi"
Zeichen an bestimmten Indizes können von der index
werden.
ghci> T.index myText 2
's'
Die findIndex
Funktion nimmt eine Funktion vom Typ (Char -> Bool)
und Text an und gibt den Index des ersten Vorkommens einer angegebenen Zeichenfolge oder Nothing zurück, falls dies nicht der Fall ist.
ghci> T.findIndex ('s'==) myText
Just 2
ghci> T.findIndex ('c'==) myText
Nothing
Die count
Funktion gibt die Anzahl , wie oft eine Abfrage Text
innerhalb eines anderen tritt Text
.
ghci> count ("miss"::T.Text) myText
1