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