go 對中文字串的操作
阿新 • • 發佈:2020-09-02
go中對於中文字串的操作
統計字數
go在處理字串時,經常需要知道字串的字元數,但len()只計算字串位元組數,因此我們可以自定義處理字串個數的函式
func countNum(handlerStr string) int {
r := []rune(handlerStr)
return len(r)
}
擷取前10位字串
先統計字串的個數,然後進行擷取操作
func InterceptString(resStr string) string { result := resStr r := []rune(resStr) if len(r) >= 10{ result = string(r[:10]) } return result }
參考部落格
如有錯誤,望請指正
以下內容與此篇部落格無關,純屬個人筆記
場景是需要返回interface{}資料
var parserLock = sync.Mutex{} func ParserAllMatchRules(url, html string, pattern []rules.Rule, strategy int) (interface{}, error) { parserLock.Lock() if strategy != 2 && len([]rune(html)) > 800000 { parserLock.Unlock() return nil, errors.New("html is too long:" + url) } var assemblyData []interface{} for _, rule := range pattern { response := graphquery.ParseFromString(html, rule.Patterns) if response.Data != nil{ resParseData := response.Data.(map[string]interface{}) allUrlList := resParseData["data"].([]interface{}) assemblyData = append(assemblyData, allUrlList...) } else { zap.S().Infow("more rule parse failed", "data", response.Data, "response", response) } } if len(assemblyData) == 0{ zap.S().Infow("response parser length is zero", "resultData") parserLock.Unlock() return nil, errors.New("data length is zero") } //去除重複連結 assemblyData = removeDuplicateElement(assemblyData) zap.S().Info("列表長度為:", len(assemblyData)) parserLock.Unlock() resultData := map[string]interface{}{} resultData["data"] = assemblyData return resultData, nil } func removeDuplicateElement(languages []interface{}) []interface{} { result := make([]interface{}, 0, len(languages)) temp := map[string]struct{}{} for _, item := range languages { resUrl := item.(map[string]interface{})["url"].(string) if resUrl == ""{ continue } if _, ok := temp[resUrl]; !ok { temp[resUrl] = struct{}{} result = append(result, item) } } return result }