go 字符串截取指定字节长度

func SubstrByByte(str string, length int) string {

    if len([]byte(str))<=length{
        return str
    }
    bs := []byte(str)[:length]
    bl := 0
    for i:=len(bs)-1; i>=0; i-- {
        switch {
        case bs[i] >= 0 && bs[i] <= 127:
            return string(bs[:i+1])
        case bs[i] >= 128 && bs[i] <= 191:
            bl++;
        case bs[i] >= 192 && bs[i] <= 253:
            cl := 0
            switch {
            case bs[i] & 252 == 252:
                cl = 6
            case bs[i] & 248 == 248:
                cl = 5
            case bs[i] & 240 == 240:
                cl = 4
            case bs[i] & 224 == 224:
                cl = 3
            default:
                cl = 2
            }
            if bl+1 == cl {
                return string(bs[:i+cl])
            }
            return string(bs[:i])
        }
    }
    return ""
}
func main() {
    str :="你好,我们正在进行测试测试111活动,只要邀请1位好友添加我\n的微信就可以获得奖品 参与流程:①点击下面链接,生成专属海报;②进入链接后长按保存海报,将海报发给好友或朋友圈 ③邀请1位好友扫码添加,即可成功获得奖品 ④进入链接点击\n查看进度,完成任务后点击「领取奖励」即可领取哦 注意事项:请不要直接转发活动链接给好友,是无法成功记录数据的哦~海报转发海报转发海报转发海报转发海报转发海报转发海报转\n发海报转发海报转发海报转发海报转发海报转发海报转发海报转发海报转发海报转发海报转发海报转发海报转发海报转发海报转发海报转发海"
    fmt.Println(SubstrByByte(str,738))
}

 

posted on 2021-04-28 16:07  running-fly  阅读(872)  评论(0编辑  收藏  举报

导航