Поиск…


замечания

Text является более эффективной альтернативой стандартным String типам Haskell. String определяется как связанный список символов в стандартной прелюдии в отчете Haskell :

type String = [Char]

Text представлен как упакованный массив символов Юникода. Это похоже на то, как большинство других языков высокого уровня представляют строки, и дает гораздо лучшую эффективность времени и пространства, чем версия списка.

Text должен быть предпочтительнее для String для всех видов использования. Заметное исключение зависит от библиотеки, которая имеет String API, но даже в этом случае может быть полезно использовать Text внутри и преобразовать в String непосредственно перед взаимодействием с библиотекой.

Во всех примерах в этом разделе используется расширение языка OverloadedStrings .

Текстовые литералы

Расширение языка OverloadedStrings позволяет использовать обычные строковые литералы для обозначения значений Text .

{-# LANGUAGE OverloadedStrings #-}

import qualified Data.Text as T

myText :: T.Text
myText = "overloaded"

Удаление пробелов

{-# LANGUAGE OverloadedStrings #-}

import qualified Data.Text as T

myText :: T.Text
myText = "\n\r\t   leading and trailing whitespace   \t\r\n"

strip удаляет пробелы с начала и конца значения Text .

ghci> T.strip myText
"leading and trailing whitespace"

stripStart удаляет пробелы только с самого начала.

ghci> T.stripStart myText
"leading and trailing whitespace   \t\r\n"

stripEnd удаляет пробелы только с конца.

ghci> T.stripEnd myText
"\n\r\t   leading and trailing whitespace"

filter можно использовать для удаления пробелов или других символов с середины.

ghci> T.filter /=' ' "spaces in the middle of a text string"
"spacesinthemiddleofatextstring"

Разделение текстовых значений

{-# LANGUAGE OverloadedStrings #-}

import qualified Data.Text as T

myText :: T.Text
myText = "mississippi"

splitOn разбивает Text на список Texts на вхождения подстроки.

ghci> T.splitOn "ss" myText
["mi","i","ippi"]

splitOn является инверсным для intercalate .

ghci> intercalate "ss" (splitOn "ss" "mississippi")
"mississippi"

split разбивает Text значение на куски на символы, которые удовлетворяют булевому предикату.

ghci> T.split (== 'i') myText
["m","ss","ss","pp",""]

Текст кодирования и декодирования

Функции кодирования и декодирования для различных кодировок Unicode можно найти в модуле Data.Text.Encoding .

ghci> import Data.Text.Encoding
ghci> decodeUtf8 (encodeUtf8 "my text")
"my text"

Обратите внимание, что decodeUtf8 будет генерировать исключение из недопустимого ввода. Если вы хотите обрабатывать недействительный UTF-8 самостоятельно, используйте decodeUtf8With .

ghci> decodeUtf8With (\errorDescription input -> Nothing) messyOutsideData

Проверка того, является ли текст подстрокой другого текста

ghci> :set -XOverloadedStrings
ghci> import Data.Text as T

isInfixOf :: Text -> Text -> Bool проверяет, содержится ли Text в любом другом Text .

ghci> "rum" `T.isInfixOf` "crumble"
True

isPrefixOf :: Text -> Text -> Bool проверяет, появляется ли Text в начале другого Text .

ghci> "crumb" `T.isPrefixOf` "crumble"
True

isSuffixOf :: Text -> Text -> Bool проверяет, появляется ли Text в конце другого Text .

ghci> "rumble" `T.isSuffixOf` "crumble"
True

Текст индексирования

{-# LANGUAGE OverloadedStrings #-}

import qualified Data.Text as T

myText :: T.Text

myText = "mississippi"

Символы в определенных индексах могут быть возвращены функцией index .

ghci> T.index myText 2
's'

Функция findIndex выполняет функцию типа (Char -> Bool) и Text и возвращает индекс первого вхождения данной строки или Nothing, если она не встречается.

ghci> T.findIndex ('s'==) myText
Just 2
ghci> T.findIndex ('c'==) myText
Nothing

Функция count возвращает количество раз, когда Text запроса встречается в другом Text .

ghci> count ("miss"::T.Text) myText
1


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow