字符串处理函数
import (
"fmt"
"strings"
)
常用操作
查找
if strings.Contains(hlsurl, "http://"){ }
buf组合
str += fmt.Sprintf("movie=%s","xx")
//Format 系列函数把其他类型的转换为字符串Go
a := strconv.FormatBool(false)
b := strconv.FormatFloat(123.23, 'g', 12, 64)
c := strconv.FormatInt(1234, 10)
d := strconv.FormatUint(12345, 10)
e := strconv.Itoa(1023)
fmt.Println(a, b, c, d, e)
interface 转字符串
var a interface{}
b := a.(string)
字符串转整型
var a string
a = "123456"
b,error := strconv.Atoi(a)
if error != nil{
fmt.Println("字符串转换成整数失败")
}
b = b + 1
fmt.Println(b)
字符串转浮点数
var s string = 1
var f float32
f, err = strconv.ParseFloat(s, 32)
// ParseFloat 将字符串转换为浮点数
// s:要转换的字符串
// bitSize:指定浮点类型(32:float32、64:float64)
// 如果 s 是合法的格式,而且接近一个浮点值,
// 则返回浮点数的四舍五入值(依据 IEEE754 的四舍五入标准)
// 如果 s 不是合法的格式,则返回“语法错误”
// 如果转换结果超出 bitSize 范围,则返回“超出范围”
func ParseFloat(s string, bitSize int) (f float64, err error)
func main() {
s := "0.12345678901234567890"
f, err := strconv.ParseFloat(s, 32)
fmt.Println(f, err) // 0.12345679104328156
fmt.Println(float32(f), err) // 0.12345679
f, err = strconv.ParseFloat(s, 64)
fmt.Println(f, err) // 0.12345678901234568
}
数字变成字符串
var c int = 1234
d := strconv.Itoa(c) //数字变成字符串
d = d + "sdfs"
fmt.Println(d)
数据强转
g_timeout = float64(b)
int 转int64
i := 23
var i64 int64
i64 = int64(i)
删除空格,跟换行。
ret := strings.Replace(src, " ", "", -1)
ret = strings.Replace(ret, "\n", "", -1)
查找
func Index(s, sep string) int 这个函数是查找字符串,然后返回当前的位置,输入的都是string类型,然后int的位置信息。
func IndexAny(s, chars string) int 这个函数是一样的查找,字符串第一次出现的位置,如果不存在就返回-1。
func IndexByte(s string, c byte) int,这个函数功能还是查找第一次粗线的位置,只不过这次C是byte类型的,查找到返回位置,找不到返回-1。
func IndexRune(s string, r rune) int,还是查找位置,只不过这次是rune类型的。
func LastIndex(s, sep string) int 看到这个大家可能也明白了查找的是最后出现的位置,正好跟index相反。
func LastIndexAny(s, chars string) int这个跟indexAny正好相反,也是查找最后一个。
fmt.Println(strings.Index("widuu", "u")) //3
fmt.Println(strings.IndexAny("widuu", "u")) //3
fmt.Println(strings.IndexByte("hello xiaowei", 'x')) //6
fmt.Println(strings.IndexRune("widuu", rune('w'))) //0
fmt.Println(strings.LastIndex("widuu", "u")) // 4
fmt.Println(strings.LastIndexAny("widuu", "u")) // 4
分割
s := "/a/b/c/d/index.m3u8"
r := strings.Split(s, "/")
n := len(r)
if n > 2 {
w := r[n-1]
h := r[n-2]
fmt.Println(w, h)
return
}
拼接
func Join(a []string, sep string) string,这个跟php中的implode差不多,这个函数是将一个[]string的切片通过分隔符,分割成一个字符串。
s := []string{"hello", "word", "xiaowei"}
fmt.Println(strings.Join(s, "-")) // hello-word-xiaowei
替换
// Replace 返回 s 的副本,并将副本中的 old 字符串替换为 new 字符串
// 替换次数为 n 次,如果 n 为 -1,则全部替换
str := "welcome to sharejs.com"
str = strings.Replace(str, " ", ",", -1) //welcome,to,sharejs.com
比较
1,自建方法“==”,区分大小写,最简单的方法
2,Compare函数,区分大小写,比自建方法“==”的速度要快,下面是注释/ Compare is included only for symmetry with package bytes.
// It is usually clearer and always faster to use the built-in
// string comparison operators ==, <, >, and so on.
func Compare(a, b string) int
字符串拼接
四种拼接方案:
1,直接用 += 操作符, 直接将多个字符串拼接. 最直观的方法,不过当数据量非常大时用这种拼接访求是非常低效的。
2,直接用 + 操作符,这个和+=其实一个意思了。
3,用字符串切片([]string)装载所有要拼接的字符串,最后使用strings.Join()函数一次性将所有字符串拼接起来。在数据量非常大时,这种方法的效率也还可以的。
4,利用Buffer( Buffer是一个实现了读写方法的可变大小的字节缓冲),将所有的字符串都写入到一个Buffer缓冲区中,最后再统一输出,这种方法最快。
代码示例
package main
import (
"bytes"
"fmt"
"strings"
"time"
)
func main() {
//第一种连接方法(最快)
var buffer bytes.Buffer
s := time.Now()
for i := 0; i < 100000;i++ {
buffer.WriteString("test is here\n")
}
buffer.String() // 拼接结果
e := time.Now()
fmt.Println("1 time is ",e.Sub(s).Seconds())
//第二种方法
s = time.Now()
var sl []string
for i := 0; i < 100000;i++ {
sl = append(sl, "test is here\n")
}
strings.Join(sl, "")
e = time.Now()
fmt.Println("2 time is",e.Sub(s).Seconds())
//第三种方法
s = time.Now()
str := ""
for i := 0; i < 100000;i++ {
str += "test is here\n"
}
e = time.Now()
fmt.Println("3 time is ",e.Sub(s).Seconds())
//第四种方法
s = time.Now()
str4 := ""
for i := 0; i < 100000;i++ {
str4 = str4 + "test is here"
}
e = time.Now()
fmt.Println("4 time is ",e.Sub(s).Seconds())
}
运行结果如下
1 time is0.00402775
2 time is0.019025534
3 time is7.162544528
4 time is6.538371249
// bytes.Buffer的方法, 将给定字符串追加(append)到Buffer
func (b *Buffer) WriteString(sstring) (nint,err error)
// 字符串拼接, 把slice通过给定的sep连接成一个字符串
func Join(a []string, sepstring) string
urlencode/urldecode
首先要引入net/url包
import (
"fmt"
"net/url"
)
测试代码:
urltest := "http://www.baidu.com/s?wd=自由度"
fmt.Println(urltest)
encodeurl:= url.QueryEscape(urltest)
fmt.Println(encodeurl)
decodeurl,err := url.QueryUnescape(encodeurl)
if err != nil {
fmt.Println(err)
}
fmt.Println(decodeurl)
输出结果:
http://www.baidu.com/s?wd=自由度
http%3A%2F%2Fwww.baidu.com%2Fs%3Fwd%3D%E8%87%AA%E7%94%B1%E5%BA%A6
http://www.baidu.com/s?wd=自由度
字符集转换
mahonia"
func ConvertToString(src string, srcCode string, tagCode string) string {
srcCoder := mahonia.NewDecoder(srcCode)
srcResult := srcCoder.ConvertString(src)
tagCoder := mahonia.NewDecoder(tagCode)
_, cdata, _ := tagCoder.Translate([]byte(srcResult), true)
result := string(cdata)
return result
}