[GO] #3-4. 패키지 탐방 (strings)

Study·2021년 5월 22일
0

고랭

목록 보기
11/18
post-thumbnail

strings

strings 패키지는 UTF-8 로 인코딩된 문자열을 조작하는 함수를 구현한다.

GO 의 UTF-8 은 링크텍스트 에서 확인 가능

함수

func Compare(a, b string) int

두 문자열을 사전 식으로 비교하여 a == b 이면 0, a < b 이면 -1 , a > b 이면 1 이 된다.

이 함수는 문자열 비교 연산자 ==, <, > 등 보다 더 명확하고 항상 빠르다.

func Contains(s, substr string) bool

substr 내에 s 가 있는지 여부를 반환한다.

func ContainsAny(s, chars string) bool

문자의 유니코드 포인트가 s 내에 있는지 여부를 반환한다.

func ContainsRune(s string, r rune) bool

유니코드 포인트 rs 내에 있는지 여부를 반환한다.

func Count(s, substr string) int

s 에서 substr 와 겹치는 인스턴스 수를 계산한다.

substr 이 빈 문자열일 경우 1 + s 의 유니코드 포인트 수를 반환한다.

fmt.Println(strings.Count("wow", "w"))	// 2
fmt.Println(strings.Count("five", "")) 	// 1 + 4

func EqualFold(s, t string) bool

UTF-8 문자열로 해석되는 st 가 유니코드 대소문자 구분없이 동일한지 여부를 반환한다.

fmt.Println(strings.EqualFold("Go", "go"))	// true

func Fields(s string) []string

unicode.IsSpace 에 의해 정의된대로 하나 이상의 연속 공백 문자로 문자열을 분할하여 슬라이스로 반환한다.

공백만 포함할 경우 빈 슬라이스를 반환한다.

func FieldsFunc(s string, f func(rune) bool) []string

f(c) 를 충족하는 유니코드 포인트의 각 실행에서 문자열 s 를 분할하고 s 의 슬라이스 슬라이스을 반환한다.

공백만 포함할 경우 빈 슬라이스를 반환한다.

func HasPrefix(s, prefix string) bool
func HasSuffix(s, suffix string) bool

문자열 sHasPrefix 는 접두사로 시작하는지, HasSuffix 는 접미사로 끝나는지 여부를 테스트한다.

func Index(s, substr string) int
func IndexAny(s, chars string) int
func IndexByte(s string, c byte) int
func IndexFunc(s string, f func(rune) bool) int
func IndexRune(s string, r rune) int

Indexs 에 있는 substr 의 첫 번째 인스턴스의 인덱스를 반환하거나 ssubstr 이 없으면 -1 을 반환한다.

IndexAnyschars 에서 유니코드 포인트의 첫 번째 인스턴스의 인덱스를 반환하거나 schars 의 유니코드 포인트가 없으면 -1 을 반환한다.

IndexBytes 에 있는 c 의 첫 번째 인스턴스의 인덱스를 반환하거나 sc 가 없으면 -1 을 반환한다.

IndexFuncf(c) 를 만족하는 첫 번째 유니코드 포인트의 s 의 인덱스를 반환한다. 그렇지 않으면 -1 이다.

IndexRune 은 유니코드 포인트 r 의 첫 번째 인스턴스의 인덱스를 반환하거나 srune 이 없으면 -1 을 반환한다.

rutf8.RuneError 가 유효하지 않은 UTF-8 바이트 시퀀스의 첫 번째 인스턴스를 반환한다.

func Join(elems []string, seq string) string

첫 번째 인수의 요소를 연결하여 단일 문자열을 만든다.

구분 문자열 seq 는 결과 문자열의 요소 사이에 배치된다.

func LastIndex(s, substr string) int
func LastIndexAny(s, chars string) int
func LastIndexByte(s string, c byte) int
func LastIndexFunc(s string, f func(rune) bool) int

LastIndexs 에 있는 substr 의 마지막 인스턴스의 인덱스를 반환하거나 ssubstr 이 없으면 -1 을 반환한다.

LastIndexAnyschars 에서 유니코드 포인트 마지막 인데스를 반환하거나 없으면 -1 반환한다.

LastIndexBytes 에 있는 c 의 마지막 인스턴스 인덱스를 반환하고 없으면 -1 반환한다.

LastIndexFuncf(c) 를 만족하는 마지막 유니코드 포인트의 s 에 대한 인덱스를 반환하고 그렇지 않으면 -1 이다.

func Map(mapping func(rune) rune, s string) string

매핑 함수에 따라 모든 문자가 수정된 문자열 s복사본을 반환한다.

매핑이 음수값 반환하면 문자는 대체없이 삭제된다.

func Repeat(s string, count int) string

문자열 s 의 복사본 개수로 구성된 새 문자열을 반환한다.

count 가 음수거나 len(s) *count 결과가 오버플로우면 패닉이 발생한다.

func Replace(s, old, new string, n int) string
func ReplaceAll(s, old, new string) string

Replace 는 겹치지 않는 처음 n 개의 old 인스턴스가 new 로 대체된 문자열 s복사본을 반환한다.

old 가 비어 있으면 문자열의 시작 부분과 각 UTF-8 시퀀스 뒤에 일치하여 k-rune 문자열에 대해 최대 k + 1 개의 대체를 생성한다.

n < 0 이면 교체 횟수에 제한이 없다.

ReplaceAll 의 경우 모든 old 인스턴스를 대체한다.

old 가 비어있을 경우는 Replace 와 동일하다.

func Split(s, seq string) []string
func SplitAfter(s, seq string) []string
func SplitAfterN(s, seq string, n int) []string
func SplitN(s, seq string, n int) []string

Splitsseq 로 구분된 모든 하위 문자열로 분할하여 슬라이스로 반환한다.

sseq 가 포함되어 있지 않으면 요소가 s 인 길이 1 의 슬라이스를 반환한다.

seq 가 비어 있다면 각 UTF-8 시퀀스 후 분할한다.
모두 비어 있다면 빈 슬라이스를 반환한다.

SplitAfter 의 경우 seq 의 각 인스턴스 다음에 있는 모든 하위 문자열로 슬라이스하고 해당 문자열의 슬라이스를 반환한다.

SplitAfterNseq 의 각 인스턴스 다음에 s 를 부분 문자열로 분할하고 해당 부분 문자열의 슬라이스를 반환한다.

개수는 반환할 하위 문자열 수를 결정한다.

  1. n > 0 : 최대 n 개의 부분 문자열
  2. n == 0 : 결과가 nil
  3. n < 0 : 모든 부분 문자열

SplitNsseq 로 구분된 부분 문자열로 분할하고 해당 구분 기호 사이의 부분 문자열을 슬라이스로 반환한다.

문자열 수를 결정하는 것은 SplitAfterN 과 동일하다.

func Title(s string) string
func ToTitle(s string) string
func ToTitleSpecial(c unicode.SpecialCase, s string) string

Title 은 단어를 시작하는 모든 유니코드 문자가 제목 케이스의 복사본을 반환한다.

ToTitle 은 모든 유니코드 문자를 제목 케이스의 복사본을 반환한다.

ToTitleSpecial 은 모은 유니코드 문자를 제목 케이스로 매핑하여 특수 대소문자 규칙에 우선 순위를 부여하여 복사본을 반환한다.

func ToLower(s string) string
func ToLowerSpecial(c unicode.SpecialCase, s string) string
func ToUpper(s string) string
func ToUpperSpecial(c unicode.SpecialCase, s string) string

To[Lower|Upper] 는 모든 유니코드 문자가 [대 | 소]문자로 매핑되어 반환한다.

ToLowerSpecialc 로 지정된 대소문자 매핑을 사용하여 모든 유니코드 문자를 [대 | 소]문자로 매핑한 복사본을 반환한다.

ToLower 는 모든 유니코드 문자가 대문자로 매핑되어 반환한다.

ToLowerSpecialc 로 지정된 대소문자 매핑을 사용하여 모든 유니코드 문자를 대문자로 매핑하여 반환한다.

func ToValidUTF8(s, replacement string) string

유효하지 않은 UTF-8 바이트 시퀀스의 각 실행이 비어있을 수 있는 대체 문자열로 대체된 문자열 복사본을 반환한다.

func Trim(s, cutset string) string
func TrimFunc(s string, f func(rune) bool) string
func TrimLeft(s, cutset string) string
func TrimLeftFunc(s, f func(rune) bool) string
func TrimRight(s, cutset string) string
func TrimRightFunc(s, f func(rune) bool) string
func TrimPrefix(s, prefix string) string
func TrimSuffix(s, suffix string) string
func TrimSpace(s string) string

Trimcutset 에 포함된 모든 선행 및 후행 유니코드 포인트가 제거된 문자열을 반환한다.

TrimFuncf(c) 를 충족하는 모든 선행 및 후행 유니코드 포인트 c 가 제거된 문자열을 반환한다.

Trim[Left|Right]cutset 에 포함된 모든 [선행 | 후행] 유니코드 포인트가 제거된 문자열을 반환한다.

Trim[Left|Right]Funcf(c) 를 만족하는 모든 [선행 | 후행] 유니코드 포인트가 제거된 문자열을 반환한다.

Trim[Prefix|Suffix] 는 [선행 | 후행] 접두사 문자열를 제거하고 반환한다.

TrimSpace 는 모든 선행 및 후행 공백이 제거된 문자열을 반환한다.

유형

Builder

type Builder struct {
	// 필터링 되거나 내보내지지 않은 필드 포함
    	addr *Builder 	// 값에 의한 복사를 감지하는 리시버
	buf  []byte 	// 버퍼
}

BuilderWrite 메소드를 사용하여 문자열을 효율적으로 작성하는데 사용되는데 메모리 복사를 최소화한다.

초기화 되었다면 사용하는데 준비가 된 것이지만, 아니라면 빌더는 복사하여 사용하지 말자.

func (b *Builder) Cap() int

빌더의 기본 바이트 조각의 용량을 반환

func (b *Builder) Grow (n int)

필요한 경우 b 의 용량을 증가시켜 다른 n 바이트의 공간을 보장한다.

n 이 음수이면 패닉이 발생한다.

func (b *Builder) Len() int

누적된 바이트 수를 반환한다. b.Len() == len(b.String())

func (b *Builder) Reset()

빌더를 비워서 재설정한다.

func (b *Builder) String() string

누적된 문자열을 반환한다.

func (b *Builder) Write (p []byte) (int, error)
func (b *Builder) WriteByte (c byte) error
func (b *Builder) WriteRune (r rune) (int, error)
func (b *Builder) WriteString (s string) (int, error)

Writep 의 내용을 b 의 버퍼에 추가한다.
항상 len(p), nil 을 반환한다.

WriteByteb 의 버퍼에 c 바이트를 추가한다.
반환된 오류는 항상 nil 이다.

WriteRune 는 유니코드 포인트 r 의 UTF-8 인코딩을 b 의 버퍼에 추가한다.
r 의 길이와 nil 오류를 반환한다.

WriteStrings 의 내용을 b 의 버퍼에 추가한다.
s 의 길이와 nil 오류를 반환한다.

Reader

리더는 문자열에서 읽어 io.Reader, io.ReaderAt, io.ByteReader, io.ByteScanner, io.RuneReader, io.RuneScanner, io.Seekerio.WriterTo 인터페이스를 구현한다.

Reader 의 제로 값은 빈 문자열의 Reader 처럼 작동한다.

type Reader struct {
	s        string
	i        int64 // 최근 읽은 인덱스
	prevRune int   // 이전 룬의 인덱스 또는 < 0
}

func NewReader(s string) *Reader

s 에서 읽은 새 Reader 를 반환한다.

bytes.NewBufferString 과 유사하지만 더 효율적이고 읽기 전용이다.

func (r *Reader) Len() int

문자열에서 읽지 않은 부분의 바이트 수를 반환한다.

func (r *Reader) Read(b []byte) (int, error)

io.Reader 인터페이스를 구현한다.

func (r *Reader) ReadAt(b []byte, off int64) (int, error)

io.ReaderAt 인터페이스를 구현한다.

func (r *Reader) ReadByte() (byte error)

io.ByteReader 인터페이스를 구현한다.

func (r *Reader) ReadRune() (ch rune, size int, err error)

io.RuneReader 인터페이스를 구현한다.

func (r *Reader) Reset(s string)

리더가 s 에서 읽도록 재설정한다.

func (r *Reader) Seek(offset int64, whence int) (int64, error)

io.Seeker 인터페이스를 구현한다.

func (r *Reader) Size() int64

기본 문자열의 원래 길이를 반환한다.

func (r *Reader) UnreadByte() error

io.ByteScanner 인터페이스를 구현한다.

func (r *Reader) UnreadRune() error

io.RuneScanner 인터페이스를 구현한다.

func (r *Reader) WriteTo(w io.Writer) (n int64, err error)

io.WriteTo 인터페이스를 구현한다.

Replacer

Replacer 는 문자열 목록을 대체 항목으로 바꿔준다.
여러 고루틴에서 동시 사용에 안전하다.

type Replacer struct {
	once   sync.Once // 함수를 한번만 빌드
	r      replacer
	oldnew []string
}

func NewReplacer(oldnew ... string) *Replacer

이전의 문자열 쌍 목록을 새 Replacer 로 반환해준다.

대체는 일치하는 대상 문자열에 나타나는 순서대로 수행된다.

홀수 개의 인수를 제공하면 패닉이 발생한다.

func (r *Replacer) Replace(s string) string

모든 교체가 수행된 s 의 복사본을 반환한다.

func (r *Replacer) WriteString(w io.Writer, s string) (int error)

모든 교체가 수행된 상태에서 sw 에 쓴다.

profile
Study

0개의 댓글