文字列処理golang

基本プロパティ

  • GO文字列はUTF-8エンコーディングされています
    • 文字は1つのバイトがASCIIコードで占めている固定長は、別の文字がバイトを占め2-4
    • C ++、Javaおよびその他の言語は、固定長を占めています
    • 利点は、メモリやハードディスクの容量が占有削減するだけではありませんが、他の言語のようにエンコードとデコードUTF-8文字セットを使用して、テキストのようなものを必要としません
  • 文字列の不変
    • string[0] = 'a'コンパイルエラー
    • あなたは最初に変換する必要があり[]byte、その後、戻って変換し、または使用するstrings.Replace機能を
  • バイトアドレスに文字列を取得しますが違法です
  • "" ラップ文字列が自動的にエスケープ(例えば、\ nは、\ r)は、 ``包まれた文字列が出力されます
    • だから、JSON文字列はバッククォートでラップされています
  • 文字列の連結
    • 最も単純な方法演算子+を使用した場合、オーバーロード
    • プラス記号+文字列連結は、サイクルの中で最も効率的な方法ではない使用し、より良いアプローチは、関数strings.Joinを使用することです
    • より良い方法は、(bytes.Buffer状態のため)バイトのバッファを使用することですスプライス
var buffer bytes.Buffer
for {
	if s, ok := getNextString(); ok { 
		buffer.WriteString(s)
	} else {
		break
	}
}
fmt.Print(buffer.String(), "\n")

文字列パッケージ

strings.HasPrefix(s, sub) bool
strings.HasSuffix(s, sub) bool
strings.Contains(s, sub) bool
strings.Index(s, sub) int // 返回-1表示找不到
strings.LastIndex(s, sub) int
strings.Replace(str, old, new, n) string // n为-1则替换所有old
strings.Count(s, sub) int
strings.Repeat(s, n) string // 重复n次字符串s,返回新字符串
strings.ToLower(s) string
strings.ToUpper(s) string
strings.TrimSpace(s) string// 剔除空白符
strings.Trim(s, cutset) string
strings.Feilds(s) []string //去除s字符串的空格符
strings.Split(s, sep) []string // 自定义分隔符sep
strings.Join(sl []string, sep string) string // 合并字符串

StrConvパッケージ

strconv.Itoa(i int) string
strconv.Atoi(s string) (i int, err error)

// fmt表示格式('b'、'e'、'f'、'g');prec表示精度;bitSize用32表示float32,用64表示float64
strconv.FormatFloat(f float64, fmt byte, prec int, bitSize int) string
strconv.ParseFloat(s string, bitSize int) (f float64, err error)

// 将bool等类型转换为字符串后,添加到现有的字节数组中
strconv.AppendBool(dst []byte, b bool) []byte

定期的な試合

//目标字符串
searchIn := "John: 2578.34 William: 4567.23 Steve: 5632.18"
pat := "[0-9]+.[0-9]+" //正则

f := func(s string) string{
   	v, _ := strconv.ParseFloat(s, 32)
   	return strconv.FormatFloat(v * 2, 'f', 2, 32)
}

if ok, _ := regexp.Match(pat, []byte(searchIn)); ok {
   fmt.Println("Match Found!")
}

re, _ := regexp.Compile(pat)
//将匹配到的部分替换为"##.#"
str := re.ReplaceAllString(searchIn, "##.#")
fmt.Println(str)
//参数为函数时
str2 := re.ReplaceAllStringFunc(searchIn, f)
fmt.Println(str2)

輸出

Match Found!
John: ##.# William: ##.# Steve: ##.#
John: 5156.68 William: 9134.46 Steve: 11264.36
公開された161元の記事 ウォン称賛19 ビュー50000 +

おすすめ

転載: blog.csdn.net/winter_wu_1998/article/details/102734179