空飛ぶとんジニア

小さな企業のWeb担当者が日々起こったことを共有したり、思ったこと、勉強したことを書いていくブログ

Go言語で特定の文字列の位置を検索する(javascriptのindexOf的な)

stringsというpackageの中にIndexというそれっぽい関数があるが、これはbyteとしての位置を返すためちょっと工夫が必要

package main

import (
    "fmt"
    "strings"
    "unicode/utf8"
)

func main() {
    text := "下手糞の 上級者への 道のりは 己が下手さを 知りて一歩目。"
    if i := strings.Index(text[0:], "己"); i > 0 {
        fmt.Println("byte-pos:", i, "rune-pos:", utf8.RuneCountInString(text[0:i]))
    }
}
// byte-pos: 42 rune-pos: 16

半角スペースはbyteのカウントには含まれてないし結構ハマった

The Go Playground