Haskell Language
Data.Text
サーチ…
備考
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"]
splitOnはintercalateの逆です。
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