본문 바로가기
프로그래밍/Golang

Golang에서 문자열 자르기

by slowin 2024. 8. 7.

개요

Golang에서 다양한 문자열 자르기(string slice) 방법을 살펴보겠습니다.

기본적인 문자열 슬라이싱

Go에서 문자열은 불변(immutable) 바이트의 슬라이스입니다. 따라서 배열이나 슬라이스와 유사한 방식으로 인덱싱할 수 있습니다.

str := "Hello, World!"
fmt.Println(str[0:5])  // "Hello"
fmt.Println(str[:5])   // "Hello"
fmt.Println(str[7:])   // "World!"
fmt.Println(str[:])    // "Hello, World!"

주의: 이 방법은 바이트 단위로 작동하므로 UTF-8 인코딩된 문자열에서 멀티바이트 문자를 다룰 때는 주의가 필요합니다.

strings.Split() 함수 사용

import "strings"

str := "apple,banana,grape"
fruits := strings.Split(str, ",")
fmt.Println(fruits)  // [apple banana grape]

특정 구분자를 기준으로 문자열을 자르려면 `strings.Split()` 함수를 사용할 수 있습니다.

strings.Fields() 함수 사용

공백을 기준으로 문자열을 자르려면 `strings.Fields()` 함수를 사용할 수 있습니다.

text := "  Hello,   World! This is   Go.  "
words := strings.Fields(text)
fmt.Println(words)

// 출력
// [Hello, World! This is Go.]

strings.SplitN() 함수 사용

`strings.SplitN()` 함수를 사용하면 문자열을 특정 횟수만큼만 자를 수 있습니다.

str := "a:b:c:d:e"
parts := strings.SplitN(str, ":", 3)
fmt.Println(parts)  // [a b c:d:e]

정규 표현식을 이용한 문자열 자르기

복잡한 패턴으로 문자열을 자르려면 정규 표현식을 사용할 수 있습니다.

import "regexp"

str := "Hello123World456"
re := regexp.MustCompile(`\d+`)
parts := re.Split(str, -1)
fmt.Println(parts)  // [Hello World]

 

bytes 패키지 사용 (대용량 문자열 처리)

대용량 문자열을 처리할 때는 `bytes` 패키지를 사용하는 것이 효율적일 수 있습니다.

import "bytes"

str := []byte("Hello,World,Go")
parts := bytes.Split(str, []byte(","))
for _, part := range parts {
    fmt.Println(string(part))
}
// Output:
// Hello
// World
// Go

 

주의사항

1. UTF-8 인코딩: Go의 문자열은 UTF-8로 인코딩됩니다. 따라서 문자 단위로 자르려면 `[]rune()`을 사용해야 할 수 있습니다. (참고:  Golang string 과 rune / 한글(멀티바이트) 이슈)
2. 성능: 대량의 문자열을 자주 자르는 경우, `strings.Builder`나 `bytes.Buffer`를 사용하는 것이 메모리 할당 측면에서 효율적일 수 있습니다.
3. 불변성: Go의 문자열은 불변입니다. 문자열을 자르면 새로운 문자열이 생성됩니다.

 

결론

Go 언어는 문자열 처리를 위한 다양한 도구를 제공합니다. 상황에 따라 적절한 방법을 선택하여 사용하면 효율적인 문자열 처리가 가능합니다.