Golang

[Golang] 문자열

GenieLove! 2022. 2. 24. 00:26
728x90
반응형

1.UTF-8 문자코드

UTF-8 문자코드를 표준 문자코드로 사용

(1)UTF-8  -  영문자, 숫자, 일부 특수문자 1byte, 그 외 다른 문자 2 ~ 3 byte로 표현 -> UTF-16에 비해 크기 절약, ANSI코드와 1:1 대응

 

2.rune 타입

var char rune = '지'

fmt.Printf("%T", char)//int32    rune은 int32의 별칭
fmt.Println(char)//int32에 맞게 숫자로 출력
fmt.Printf("%c", char)//문자로출력

3.len()으로 문자열 크기 보기

str1 := "지니하이"
str2 := "geniehi"

fmt.Println(len(str1))//12
fmt.Println(len(str2))//7

//-> 문자열 바이트 크기를 알 수 있다.

4.[]rune 타입 변환으로 글자수 확인

str := "지니하이"
runes := []rune(str)

fmt.Println(len(str))//string 타입 길이 -> byte크기 전환
fmt.Println(len(runes))//[]rune 타입 배열 크기 -> 문자 글자수 반환

5.인덱스 사용하여 바이트 단위 순회 - 한글 깨짐

str := "지니하이"

for i := 0; i < len(str); i++ {
	fmt.Println(str[i])//한글이 깨져서 하나의 한글이 3개씩 나온다.
}

(1)대안1 - []rune 타입으로 변환 후 한글자씩 순회

str :=" 지니"
runes := []rune(str)

for i := 0; i < len(runes); i++ {
	fmt.Printf("%c", runes[i])
}

(2)대안2 - range이용

str := "지니하이"

for _, v := range str {
	fmt.Println(v)
}

6.문자열 대소 비교 - 앞 글자부터 유니코드 값으로 비교

 

7.문자열 합 - +로 하게 되면 새로운 메모리 공간을 차지하여 메모리 낭비 -> strings 패키지의 Builder이용

var builder strings.Builder
var str string = "지니하이"

for _, v := range str {
	builder.WriteRune(v)
 }
 fmt.Println(builder.String())
728x90
반응형