go-string

常用的字符串相关操作。

类型转换

import "strconv"

func Atoi(s string) (int, error)
func Itoa(i int) string

intstring 4位宽度
provinceStr += fmt.Sprintf("%04d",int(bodyReg.prefecture))

#stringint
int,err:=strconv.Atoi(string)
#stringint64
int64, err := strconv.ParseInt(string, 10, 64)
#intstring
string:=strconv.Itoa(int)
#int64string
func FormatInt(i int64, base int) string
func FormatUint(i uint64, base int) string

string := strconv.FormatInt(int64,10)


f := "3.14159265"
if s, err := strconv.ParseFloat(f, 32); err == nil {
fmt.Println(s) // 3.1415927410125732
}
if s, err := strconv.ParseFloat(f, 64); err == nil {
fmt.Println(s) // 3.14159265
}


// analogous to C's printf and scanf.
u32 := uint32(12)
str := fmt.Sprint(u32)
fmt.Println(str)

i, err := strconv.Atoi("-42")
s := strconv.Itoa(-42)
txcbi.version = strconv.FormatUint(uint64(version),10)

strconv.Itoa(i int) string 返回数字 i 所表示的字符串类型的十进制数。
strconv.FormatFloat(f float64, fmt byte, prec int, bitSize int) string64 位浮点型的数字转换为字符串,其中 fmt 表示格式(其值可以是 'b''e''f''g'),prec 表示精度,bitSize 则使用 32 表示 float32,用 64 表示 float64

Float to string

s := fmt.Sprintf("%f", 123.456) // s == "123.456000"

查找替换

func Replace(s, old, new string, n int) string

在s字符串中,把old字符串替换为new字符串,n表示替换的次数,小于0表示全部替换

//替换两次
fmt.Println(strings.Replace("oink oink oink", "k", "ky", 2))
//全部替换
fmt.Println(strings.Replace("oink oink oink", "oink", "moo", -1))

编码

https://github.com/axgle/mahonia

//val.Value 是[]byte
enc := mahonia.NewDecoder("gbk")
perParam.Value = enc.ConvertString(strings.Trim(string(val.Value[:]), " "))

//中文 粤
s := "\xd4\xc1"
enc := mahonia.NewDecoder("gbk")
fmt.Println(enc.ConvertString(s))

//粤B88888
plate := "d4c142383838383820202020"
str,err := hex.DecodeString(plate)
if err != nil {
// handle error
println("convert failed.")
}
fmt.Println(enc.ConvertString(string(str)))

Trim操作

func Trim(s string, cutset string) string
func TrimLeft(s string, cutset string) string
func TrimRight(s string, cutset string) string
func TrimPrefix(s, prefix string) string

// remove all blanks
comdata.Data = strings.Map(func(r rune) rune {
if unicode.IsSpace(r) {
return -1
}
return r
}, str)

大小写转换

func ToLower(s string) string
func ToUpper(s string) string

前缀后缀判断

func HasPrefix(s, prefix string) bool
func HasSuffix(s, suffix string) bool

fmt.Println(strings.HasPrefix("Gopher", "Go"))
fmt.Println(strings.HasPrefix("Gopher", "C"))
fmt.Println(strings.HasPrefix("Gopher", ""))

to Byte[]

d1 := "test string"
b1 := []byte(d1)

[] byte to string

ip := "CMNET"
ipByArr := []byte(ip) //"434d4e4554"
hexStr := fmt.Sprintf("%x", ipByArr)
println(hexStr)
str := string(ipByArr) //"CMNET"

para := "434d4e4554"
str,err := hex.DecodeString(para)
if err != nil {
// handle error
println("convert failed.")
}
println(string(str[:])) //"CMNET"

hex字符串to字节数组

// DecodeString returns the bytes represented by the hexadecimal string s.
func DecodeString(s string) ([]byte, error)

var encMsg string
bData, err := hex.DecodeString(encMsg)

16进制字节数组to字符串

var encData []byte
hex.EncodeToString(encData)

// EncodeToString returns the hexadecimal encoding of src.
func EncodeToString(src []byte) string

连接字符串

//速度最快的写法
var buf bytes.Buffer
buf.WriteString("hello ")
buf.WriteString("roc")
fmt.Println(buf.String()) //hello roc

str := strings.Join([]string{"hello"," world"},"")
fmt.Println(str)
str := "hello"
str += "roc"

判断字母、数字、空白符

包 unicode 包含了一些针对测试字符的非常有用的函数(其中 ch 代表字符):

判断是否为字母: unicode.IsLetter(ch)
判断是否为数字: unicode.IsDigit(ch)
判断是否为空白符号: unicode.IsSpace(ch)
这些函数返回一个布尔值。包 utf8 拥有更多与 rune 相关的函数。

转数组,修改字符串

Go中的单个字符串是rune,可以理解成一个UTF8字符的Unicode码。

import "fmt"

func main() {
str := "你好"
// 把字符串转换成字符数组
chars := []rune(str)
// 输出每一个字符(rune)
for i := range chars {
fmt.Printf("%c", chars[i])
}
fmt.Println()

// 修改一个字符
chars[1] = '我'

// 再通过把[]rune转换成string,从而达到修改字符串的目的
newStr := string(chars)
fmt.Println(newStr)
}

你好
你我

slice 分割

替换

func Replace(s, old, new string, n int) string
If n < 0, there is no limit on the number of replacements.

fmt.Println(strings.Replace("oink oink oink", "k", "ky", 2))
fmt.Println(strings.Replace("oink oink oink", "oink", "moo", -1))

gbk转utf-8

gbk := mahonia.NewDecoder("gbk")
bodyReg.plate = gbk.ConvertString(string(pp))

字符串拼接

import (
"bytes"
"fmt"
)

func main() {
// 可以直接用+来拼接字符串
str1 := "hello"
str2 := "world"

str3 := str1 + " " + str2

fmt.Println(str3)

// Go同时支持其他语言中的类似的StringBuilder概念
// 使用bytes.Buffer拼接字符串可以减少string实例的创建,更有效率
var buffer bytes.Buffer
buffer.WriteString("hello ")
buffer.WriteRune('张')

fmt.Println(buffer.String())
}

hello world
hello 张