더북(TheBook)

문자열의 내부 문자에 접근

문자열 내부에 바이트 단위로 접근할 때는 인덱스([])를 사용한다.


s := "hello"
fmt.Println(s[0])          // 104: 문자열 s의 첫 번째 문자 'h'의 코드값
fmt.Println(s[len(s)-1])   // 111: 문자열 s의 마지막 문자 'o'의 코드값

실행 결과

104

111

문자열은 UTF-8 인코딩을 사용한 유니코드 문자의 집합이다. 유니코드는 문자에 따라 바이트 수가 다르므로 인덱스로 문자열 내부에 접근할 때는 주의해야 한다.

▼ 문자열 내부에 접근 1 - 문자열에 인덱스 사용

s1 := "hello"
s2 := "안녕하세요"
fmt.Printf("s1: %c %c %c %c %c\n", s1[0], s1[1], s1[2], s1[3], s1[4])
fmt.Printf("s2: %c %c %c %c %c", s2[0], s2[1], s2[2], s2[3], s2[4])

실행 결과

str1: h e l l o

str2: ì   ë

인덱스로 문자열의 내부 문자에 접근할 때는 문자열을 []rune 타입으로 변환한 후에 접근하는 것이 안전하다.

▼ 문자열 내부에 접근 2 - 문자열을 [] rune 타입으로 변환한 후 인덱스 사용

s1 := "hello"
s2 := "안녕하세요"
r1 := []rune(s1)
r2 := []rune(s2)
fmt.Printf("s1: %c %c %c %c %c\n", r1[0], r1[1], r1[2], r1[3], r1[4])
fmt.Printf("s2: %c %c %c %c %c", r2[0], r2[1], r2[2], r2[3], r2[4])

실행 결과

s1: h e l l o

s2: 안 녕 하 세 요

문자열의 내부 문자에 순차적으로 접근

문자열의 내부 문자에 순차적으로 접근할 때는 for ... range 구문을 사용하면 편리하다.


s1 := "hello"
s2 := "안녕하세요"
for i, c := range s1 {
    fmt.Printf("%c(%d)\t", c, i)
}
fmt.Println()
for i, c := range s2 {
    fmt.Printf("%c(%d)\t", c, i)
}

실행 결과

h(0)  e(1)   l(2)   l(3)   o(4)

안(0)  녕(3)  하(6)  세(9)  요(12)

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.