Haskell Language
data.text
Поиск…
замечания
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