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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow