go--数字与string

字符串处理函数

 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
}

你可能感兴趣的:(golang)