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
반응형