go 對中文字符串的操作


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
}

參考博客

golang學習筆記

如有錯誤,望請指正


以下內容與此篇博客無關,純屬個人筆記

場景是需要返回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
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM