golang的中文substr

golang的中文substr尤其蛋疼,要获取30282这个数字,总是不正确,似乎也没有正确的方法

package main

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

func SubString(str string, begin, length int) (substr string) {
    // 将字符串的转换成[]rune
    rs := []rune(str)
    lth := len(rs)

    // 简单的越界判断
    if begin < 0 {
        begin = 0
    }
    if begin >= lth {
        begin = lth
    }
    end := begin + length
    if end > lth {
        end = lth
    }

    // 返回子串
    return string(rs[begin:end])
}
func main() {

    str := "\n\n第1页/共30282条\n\n\n每页显示\n\n    5\n    10\n    20\n\n\n\n\n条\n"
    str_start := "共"
    str_end := "条"
    len_str := utf8.RuneCountInString(str)
    len_start := utf8.RuneCountInString(str_start)
    len_end := utf8.RuneCountInString(str_end)

    rs := []rune(str)
    /*
        r_str := utf8.RuneLen(rs)
        rl_start := utf8.RuneLen(([]rune)(str_start))
        rl_end := utf8.RuneLen(([]rune)(str_end))
    */
    //us := utf8.NewString(str)

    start := strings.Index(str, str_start)
    end := strings.Index(str, str_end)

    fmt.Println(start, len(str_start), end, len(str_end))
    fmt.Println(len_str, len_start, len_end)
    //    fmt.Println(rl_start, rl_start, rl_end)

    fmt.Println(SubString(str, start, end-start-len(str_end)))

    fmt.Println(string(rs[start:end]))
}

获取的结果是82条,不是那串数字
str_start := "共"改成str_start := "/共",获取的数字就又不准了。。。

共 2 个回复


jimmykuu

package main

import (
    "strings"
)

func main() {
    str := "\n\n第1页/共30282条\n\n\n每页显示\n\n    5\n    10\n    20\n\n\n\n\n条\n"
    str_start := "共"
    str_end := "条"
    println(str[strings.Index(str, str_start)+len([]byte(str_start)) : strings.Index(str, str_end)])
}
# 0