수색…


비고

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"

stripText 값의 시작과 끝에서 공백을 제거합니다.

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 값을 청크로 나눕니다.

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 -> BoolText 가 다른 Text 내의 아무 곳에 나 포함되어 있는지 확인합니다.

ghci> "rum" `T.isInfixOf` "crumble"
True

isPrefixOf :: Text -> Text -> BoolText 가 다른 Text 의 시작 부분에 나타나는지 확인합니다.

ghci> "crumb" `T.isPrefixOf` "crumble"
True

isSuffixOf :: Text -> Text -> BoolText 가 다른 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