느리지만 꾸준히, 코딩

Golang에서 문자열 자르기 본문

프로그래밍/Golang

Golang에서 문자열 자르기

slowin 2024. 8. 7. 07:00

개요

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