Haskell Language
Data.Text
수색…
비고
Text
는 Haskell의 표준 String
유형보다 효율적인 대안입니다. String
은 하스켈 보고서 에 따라 표준 서곡에서 링크 된 문자 목록으로 정의됩니다 :
type String = [Char]
Text
는 유니 코드 문자의 압축 된 배열로 표현됩니다. 이것은 다른 대부분의 고급 언어가 문자열을 나타내는 것과 유사하며 목록 버전보다 훨씬 더 나은 시간 및 공간 효율성을 제공합니다.
Text
는 모든 프로덕션 사용을 위해 String
보다 선호되어야합니다. 주목할만한 예외는 String
API가있는 라이브러리에 따라 다르지만,이 경우에도 내부적으로 Text
를 사용하고 라이브러리와 인터페이스하기 직전에 String
변환하는 이점이있을 수 있습니다.
이 항목의 모든 예제 에서는 OverloadedStrings
언어 확장을 사용 합니다 .
텍스트 리터럴
OverloadedStrings
언어 확장을 사용하면 일반 문자열 리터럴을 사용하여 Text
값을 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",""]
텍스트 인코딩 및 디코딩
다양한 유니 코드 인코딩에 대한 인코딩 및 디코딩 기능은 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