2014-02-16 2 views
6

바이트 대신 문자 (또는 룬 문자)로 문자열의 하위 문자열 위치를 어떻게 알 수 있습니까?Go에서 하위 문자열의 문자 위치 지정

strings.Index(s, sub)은 바이트 단위로 위치를 제공합니다. 유니 코드를 사용하는 경우, 그것은 룬의 위치를 ​​일치하지 않습니다 http://play.golang.org/p/DnlFjPaD2j

func main() { 
    s := "áéíóúÁÉÍÓÚ" 
    fmt.Println(strings.Index(s, "ÍÓ")) 
} 

결과 : (14) 예상 : 물론 7

, 나는 []runessub을 변환하고 수동으로 subslice를 찾을 수 , 그것을 할 수있는 더 좋은 방법이 있습니까?

이와 관련하여 첫 번째 n 자의 문자열을 얻으려면 다음을 수행합니다. string([]rune(s)[:n]). 그게 최선의 방법일까요?

답변

5

당신은 unicode/utf8 패키지를 가져온 후, 이런 식으로 작업을 수행 할 수 있습니다

func main() { 
    s := "áéíóúÁÉÍÓÚ" 
    i := strings.Index(s, "ÍÓ") 
    fmt.Println(utf8.RuneCountInString(s[:i])) 
} 

http://play.golang.org/p/Etszu3rbY3