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