-
golang: 문자열 함수Back-End/Golang 2024. 4. 21. 13:39반응형
Go 언어에서 문자열을 다루는 데 사용되는 주요 함수들은 대부분 strings 패키지 내에 있습니다. 여기서는 strings 패키지의 주요 함수들을 나열하겠습니다. 이 함수들은 다양한 문자열 조작 작업에 사용될 수 있습니다:
- Compare: 두 문자열을 비교하고, 첫 번째 문자열이 두 번째 문자열보다 작으면 -1, 같으면 0, 크면 1을 반환합니다.
- Contains: 하나의 문자열이 다른 문자열에 포함되어 있는지 확인합니다.
- ContainsAny: 주어진 문자들 중 하나라도 문자열에 포함되어 있는지 확인합니다.
- ContainsRune: 문자열이 특정 룬을 포함하고 있는지 확인합니다.
- Count: 하나의 문자열이 다른 문자열에 몇 번 등장하는지 세어 반환합니다.
- EqualFold: 두 문자열이 대소문자를 구분하지 않고 같은지 확인합니다.
- Fields: 문자열을 공백으로 분리하여 슬라이스로 반환합니다.
- FieldsFunc: 지정된 함수를 만족하는 지점에서 문자열을 분리합니다.
- HasPrefix: 문자열이 특정 접두사로 시작하는지 확인합니다.
- HasSuffix: 문자열이 특정 접미사로 끝나는지 확인합니다.
- Index: 하나의 문자열이 다른 문자열에서 처음 등장하는 위치를 반환합니다.
- IndexAny: 문자열 중 주어진 문자들 중 하나가 처음으로 등장하는 위치를 반환합니다.
- IndexByte: 문자열에서 특정 바이트가 처음으로 등장하는 위치를 반환합니다.
- IndexFunc: 지정된 함수를 만족하는 첫 번째 문자의 위치를 반환합니다.
- IndexRune: 문자열에서 특정 룬이 처음으로 등장하는 위치를 반환합니다.
- Join: 여러 문자열을 주어진 구분자로 결합합니다.
- LastIndex: 하나의 문자열이 다른 문자열에서 마지막으로 등장하는 위치를 반환합니다.
- LastIndexAny: 문자열 중 주어진 문자들 중 하나가 마지막으로 등장하는 위치를 반환합니다.
- LastIndexByte: 문자열에서 특정 바이트가 마지막으로 등장하는 위치를 반환합니다.
- LastIndexFunc: 지정된 함수를 만족하는 마지막 문자의 위치를 반환합니다.
- Map: 문자열의 각 문자에 대해 함수를 적용하고 결과를 새 문자열로 반환합니다.
- Repeat: 문자열을 주어진 횟수만큼 반복하여 새 문자열을 생성합니다.
- Replace: 문자열 내의 부분 문자열을 다른 문자열로 지정된 횟수만큼 교체합니다.
- ReplaceAll: 문자열 내의 부분 문자열을 다른 문자열로 모두 교체합니다.
- Split: 문자열을 주어진 구분자에 따라 분리하여 슬라이스로 반환합니다.
- SplitAfter: 구분자를 포함하여 문자열을 분리합니다.
- SplitAfterN: 구분자를 포함하여 문자열을 주어진 횟수만큼 분리합니다.
- SplitN: 문자열을 주어진 구분자와 횟수에 따라 분리합니다.
- Title: 문자열의 각 단어의 첫 글자를 대문자로 변환합니다.
- ToLower: 문자열의 모든 문자를 소문자로 변환합니다.
- ToUpper: 문자열의 모든 문자를 대문자로 변환합니다.
- Trim: 문자열 양쪽 끝에서 주어진 문자 집합을 제거합니다.
- TrimFunc: 문자열 양쪽 끝에서 지정된 함수를 만족하는 문자를 제거합니다.
- TrimLeft: 문자열 왼쪽 끝에서 주어진 문자 집합을 제거합니다.
- TrimRight: 문자열 오른쪽 끝에서 주어진 문자 집합을 제거합니다.
- TrimSpace: 문자열 양쪽 끝에서 공백을 제거합니다.
package main import ( "fmt" "strings" "unicode" ) func main() { // Compare: 두 문자열을 비교하고, 첫 번째 문자열이 두 번째 문자열보다 작으면 -1, 같으면 0, 크면 1을 반환합니다. fmt.Println(strings.Compare("abc", "bcd")) // -1 fmt.Println(strings.Compare("abc", "abc")) // 0 fmt.Println(strings.Compare("bcd", "abc")) // 1 // Contains: 하나의 문자열이 다른 문자열에 포함되어 있는지 확인합니다. fmt.Println(strings.Contains("hello world", "world")) // true // ContainsAny: 주어진 문자들 중 하나라도 문자열에 포함되어 있는지 확인합니다. fmt.Println(strings.ContainsAny("team", "i")) // false fmt.Println(strings.ContainsAny("failure", "ui")) // true // ContainsRune: 문자열이 특정 룬을 포함하고 있는지 확인합니다. fmt.Println(strings.ContainsRune("gopher", 'p')) // true // Count: 하나의 문자열이 다른 문자열에 몇 번 등장하는지 세어 반환합니다. fmt.Println(strings.Count("cheese", "e")) // 3 // EqualFold: 두 문자열이 대소문자를 구분하지 않고 같은지 확인합니다. fmt.Println(strings.EqualFold("Go", "go")) // true // Fields: 문자열을 공백으로 분리하여 슬라이스로 반환합니다. fmt.Printf("%q\n", strings.Fields(" foo bar baz ")) // ["foo" "bar" "baz"] // FieldsFunc: 지정된 함수를 만족하는 지점에서 문자열을 분리합니다. fmt.Printf("%q\n", strings.FieldsFunc(" foo1;bar2,baz3...", func(c rune) bool { return !unicode.IsLetter(c) })) // ["foo" "bar" "baz"] // HasPrefix: 문자열이 특정 접두사로 시작하는지 확인합니다. fmt.Println(strings.HasPrefix("golang", "go")) // true // HasSuffix: 문자열이 특정 접미사로 끝나는지 확인합니다. fmt.Println(strings.HasSuffix("golang", "lang")) // true // Index: 하나의 문자열이 다른 문자열에서 처음 등장하는 위치를 반환합니다. fmt.Println(strings.Index("chicken", "ken")) // 4 fmt.Println(strings.Index("chicken", "dmr")) // -1 // IndexAny: 문자열 중 주어진 문자들 중 하나가 처음으로 등장하는 위치를 반환합니다. fmt.Println(strings.IndexAny("chicken", "aeiouy")) // 2 // IndexByte: 문자열에서 특정 바이트가 처음으로 등장하는 위치를 반환합니다. fmt.Println(strings.IndexByte("gopher", 'p')) // 2 // IndexFunc: 지정된 함수를 만족하는 첫 번째 문자의 위치를 반환합니다. fmt.Println(strings.IndexFunc("gopher", unicode.IsNumber)) // -1 // IndexRune: 문자열에서 특정 룬이 처음으로 등장하는 위치를 반환합니다. fmt.Println(strings.IndexRune("gopher", 'p')) // 2 // Join: 여러 문자열을 주어진 구분자로 결합합니다. fmt.Println(strings.Join([]string{"name", "surname"}, ", ")) // name, surname // LastIndex: 하나의 문자열이 다른 문자열에서 마지막으로 등장하는 위치를 반환합니다. fmt.Println(strings.LastIndex("go gopher", "go")) // 3 // LastIndexAny: 문자열 중 주어진 문자들 중 하나가 마지막으로 등장하는 위치를 반환합니다. fmt.Println(strings.LastIndexAny("chicken", "aeiouy")) // 5 // LastIndexByte: 문자열에서 특정 바이트가 마지막으로 등장하는 위치를 반환합니다. fmt.Println(strings.LastIndexByte("gophers rock", 'r')) // 9 // LastIndexFunc: 지정된 함수를 만족하는 마지막 문자의 위치를 반환합니다. fmt.Println(strings.LastIndexFunc("go 123", unicode.IsNumber)) // 5 // Map: 문자열의 각 문자에 대해 함수를 적용하고 결과를 새 문자열로 반환합니다. rot13 := func(r rune) rune { switch { case r >= 'A' && r <= 'Z': return 'A' + (r-'A'+13)%26 case r >= 'a' && r <= 'z': return 'a' + (r-'a'+13)%26 } return r } fmt.Println(strings.Map(rot13, "Terraform")) // Greensbez // Repeat: 문자열을 주어진 횟수만큼 반복하여 새 문자열을 생성합니다. fmt.Println(strings.Repeat("na", 2)) // nana // Replace: 문자열 내의 부분 문자열을 다른 문자열로 지정된 횟수만큼 교체합니다. fmt.Println(strings.Replace("oink oink oink", "k", "ky", 2)) // oinky oinky oink // ReplaceAll: 문자열 내의 부분 문자열을 다른 문자열로 모두 교체합니다. fmt.Println(strings.ReplaceAll("oink oink oink", "oink", "moo")) // moo moo moo // Split: 문자열을 주어진 구분자에 따라 분리하여 슬라이스로 반환합니다. fmt.Printf("%q\n", strings.Split("a,b,c", ",")) // ["a" "b" "c"] // SplitAfter: 구분자를 포함하여 문자열을 분리합니다. fmt.Printf("%q\n", strings.SplitAfter("a,b,c", ",")) // ["a," "b," "c"] // SplitAfterN: 구분자를 포함하여 문자열을 주어진 횟수만큼 분리합니다. fmt.Printf("%q\n", strings.SplitAfterN("a,b,c,d,e", ",", 3)) // ["a," "b," "c,d,e"] // SplitN: 문자열을 주어진 구분자와 횟수에 따라 분리합니다. fmt.Printf("%q\n", strings.SplitN("a,b,c,d,e", ",", 3)) // ["a" "b" "c,d,e"] // Title: 문자열의 각 단어의 첫 글자를 대문자로 변환합니다. fmt.Println(strings.Title("loud noises")) // Loud Noises // ToLower: 문자열의 모든 문자를 소문자로 변환합니다. fmt.Println(strings.ToLower("LOUD")) // loud // ToUpper: 문자열의 모든 문자를 대문자로 변환합니다. fmt.Println(strings.ToUpper("quiet")) // QUIET // Trim: 문자열 양쪽 끝에서 주어진 문자 집합을 제거합니다. fmt.Println(strings.Trim(" spacious ", " ")) // "spacious" // TrimFunc: 문자열 양쪽 끝에서 지정된 함수를 만족하는 문자를 제거합니다. fmt.Println(strings.TrimFunc("12345abcde67890", func(r rune) bool { return unicode.IsNumber(r) })) // "abcde" // TrimLeft: 문자열 왼쪽 끝에서 주어진 문자 집합을 제거합니다. fmt.Println(strings.TrimLeft(">>>trim", ">")) // "trim" // TrimRight: 문자열 오른쪽 끝에서 주어진 문자 집합을 제거합니다. fmt.Println(strings.TrimRight("trim<<<", "<")) // "trim" // TrimSpace: 문자열 양쪽 끝에서 공백을 제거합니다. fmt.Println(strings.TrimSpace(" \t\n Hello, Gopher \n\t\r\n")) // "Hello, Gopher" }
룬(rune)이란?
Go 언어에서 "룬(rune)"은 문자를 나타내는 데이터 타입입니다. rune은 사실상 int32의 별칭(alias)으로, 유니코드 코드 포인트를 표현하는 데 사용됩니다. 즉, rune 타입은 모든 유니코드 문자를 저장할 수 있으며, Go의 문자열은 UTF-8 인코딩된 바이트 시퀀스로 저장되기 때문에, 이를 문자 단위로 다루기 위해 rune을 사용합니다.
예를 들어, UTF-8 인코딩에서 하나의 문자는 1바이트에서 4바이트까지 다양한 길이를 가질 수 있는데, rune 타입은 이러한 다양한 크기의 문자를 일관되게 4바이트로 표현합니다. 이는 다국어 처리나 문자열에서 문자 단위로 접근할 때 매우 유용합니다.
Go에서 문자열을 rune 슬라이스로 변환하면 각 rune 값이 해당 문자의 유니코드 코드 포인트를 나타내게 됩니다. 다음은 rune과 관련된 간단한 예제입니다:
package main import ( "fmt" ) func main() { s := "안녕하세요" r := []rune(s) // 문자열을 rune 슬라이스로 변환 for i, runeValue := range r { fmt.Printf("%d번째 문자: %c (유니코드: %U)\n", i, runeValue, runeValue) } }
이 코드는 한글 문자열 "안녕하세요"를 rune 슬라이스로 변환하고, 각 문자의 값과 유니코드 코드 포인트를 출력합니다. rune을 사용함으로써 문자열의 각 문자에 정확하게 접근할 수 있습니다. 이렇게 rune을 사용하는 것은 문자열을 다룰 때 특히 다양한 글자를 포함하는 국제화된 어플리케이션에서 매우 중요합니다.
반응형'Back-End > Golang' 카테고리의 다른 글
golang: 1급 시민(First-class citizen)이란? (1) 2024.04.28 golang: Go 언어의 장점 (1) 2024.04.21 golang: for-select 패턴 (0) 2024.04.19 golang: 동시성에서 제한(Confinement)이란? (0) 2024.04.19 golang: 포인터(Pointer)란? (0) 2024.03.30