サーチ…


備考

Textは、Haskellの標準のString型よりも効率的な代替方法です。 String、Haskellレポートごとに、標準プレリュードの文字のリンクリストとして定義されています:

type String = [Char]

Textは、Unicode文字のパックド配列として表されます。これは、他のほとんどの高水準言語が文字列を表す方法と似ており、リストバージョンよりもはるかに良い時間と空間効率を提供します。

すべての本番用法では、 StringよりTextを優先する必要があります。注目すべき例外は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"]

splitOnintercalateの逆です。

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

splitは、 Text値をブール述語を満たす文字のチャンクにsplitます。

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使用して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