mb_strpos

mb_strpos

[code]
package main

import (
    "fmt"
    "strings"
)

func main() {
    fmt.Println(mb_strpos("聚合数据科技公司", "科技")) // 4
    fmt.Println(mb_strpos("聚合数据--科技公司", "科技")) // 6
    fmt.Println(mb_strpos("juhe聚合数据-科技公司", "数据")) // 6
}

func mb_strpos(haystack, needle string) int {
    index := strings.Index(haystack, needle)
    if index == -1 || index == 0 {
        return index
    }
    pos := 0
    total := 0
    reader := strings.NewReader(haystack)
    for {
        _, size, err := reader.ReadRune()
        if err != nil {
            return -1
        }
        total += size
        pos++
        // got it
        if total == index {
            return pos
        }
    }
}

[/code]