이번 편의 목표: 한글 제목의 바이트 수와 글자 수를 구분하고, 첫 단어만 꺼냅니다.
string의 len은 바이트 수입니다. 한글 한 글자는 UTF-8에서 3바이트이므로 글자 수와 다릅니다. 글자 수는 unicode/utf8의 RuneCountInString으로 셉니다. range는 바이트 위치와 rune을 줍니다.
이 편부터는 main.go만 바꿉니다. 11편의 book 패키지를 import하지 않으면 실행에 포함되지 않습니다.
package main
import (
"fmt"
"unicode/utf8"
)
func firstWord(title string) string {
for index, ch := range title {
if ch == ' ' {
return title[:index]
}
}
return title
}
func main() {
title := "생각 나무"
fmt.Println(len(title))
fmt.Println(utf8.RuneCountInString(title))
fmt.Println(firstWord(title))
}생각과 나무, 그리고 가운데 공백은 3바이트짜리 글자 넷과 1바이트 공백입니다. 첫 줄은 13, 둘째 줄은 5, 셋째 줄은 생각입니다. range의 index는 바이트 위치이므로 그 위치에서 자르면 글자 중간을 가르지 않습니다.
문자열은 한 번 만들면 글자를 갈아 끼우지 않습니다. 일부를 쓸 때는 잘라서 새 문자열로 받습니다.
직접 해 보기
제목을 나무 생각으로 바꿨을 때 마지막 줄이 나무인지 확인하세요.
해설
첫 공백 앞이 나무이므로 firstWord의 결과는 나무입니다. 바이트 길이는 13이고 글자 수는 5입니다.
COMMENTS
댓글 0
이 글에 대한 의견이나 질문을 남겨 주세요.
댓글은 구글이나 카카오로 시작한 뒤에 남길 수 있습니다.
등록된 댓글이 없습니다.