字符串操作是任何编程语言中都无法避免的操作,本篇文章将详细介绍Golang中字符串包含相关的操作和实现,包括字符串截取、反转、转数字、拼接、生成随机字符串、排序、转时间、转数组等操作。
一、Golang字符串截取
Golang中截取字符串有多种方式,可以利用循环语句和字符串切片等方法,下面分别进行介绍。
第一种方法:利用循环语句进行截取。代码如下:
func subString(str string, start int, length int) string { rs := []rune(str) len_rs := len(rs) end := start + length if start < 0 || start >= len_rs || end > len_rs { return "" } return string(rs[start:end]) } func main() { str := "Golang is a powerful programming language" fmt.Println(subString(str, 7, 5)) // 输出 "is a " }
第二种方法:使用字符串切片截取。代码如下:
func main() { str := "Golang is a powerful programming language" subStr := str[7:12] fmt.Println(subStr) // 输出 "is a " }
需要注意的是,在使用字符串切片进行截取时,被截取的字符串可以是汉字,但是需要保证截取的起始和结束位置所在的字节均为汉字对应的utf-8编码的三个字节的起始位置和结束位置。
二、Golang字符串反转
字符串反转是一个常见的字符串操作,可以使用Golang内置的strings包或者自己实现函数进行实现。
第一种方法:使用strings包中的Reverse函数进行反转。代码如下:
func main() { str := "Hello, world!" reversed := []rune(str) for i, j := 0, len(reversed)-1; i < j; i, j = i+1, j-1 { reversed[i], reversed[j] = reversed[j], reversed[i] } fmt.Println(string(reversed)) // 输出 "!dlrow ,olleH" }
第二种方法:自己实现字符串反转函数。代码如下:
func reverse(str string) string { runes := []rune(str) for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 { runes[i], runes[j] = runes[j], runes[i] } return string(runes) } func main() { str := "Hello, world!" fmt.Println(reverse(str)) // 输出 "!dlrow ,olleH" }
三、Golang字符串转数字
Golang中可以使用strconv包进行字符串和数字类型之间的转换,使用起来非常方便。
第一种方法:将字符串转为整型数字或浮点型数字。代码如下:
func main() { str := "123" // 将字符串转为整型数字 i, _ := strconv.Atoi(str) fmt.Printf("%d\n", i) // 将字符串转为浮点型数字 f, _ := strconv.ParseFloat(str, 64) fmt.Printf("%f\n", f) }
第二种方法:将数字类型转为字符串。代码如下:
func main() { i := 123 // 将整型数字转为字符串 str_i := strconv.Itoa(i) fmt.Printf("%s\n", str_i) f := 123.456 // 将浮点型数字转为字符串 str_f := strconv.FormatFloat(f, 'f', 2, 64) fmt.Printf("%s\n", str_f) }
四、Golang字符串拼接
Golang中可以使用+或者strings包中的Join函数进行字符串的拼接,下面分别进行介绍。
第一种方法:使用+进行字符串拼接。代码如下:
func main() { str1 := "Hello" str2 := "World!" // 使用+进行字符串拼接 result := str1 + ", " + str2 fmt.Printf("%s\n", result) }
第二种方法:使用Join函数进行字符串拼接。代码如下:
func main() { strs := []string{"Hello", "World!", "Golang"} // 使用Join函数进行字符串拼接 result := strings.Join(strs, ", ") fmt.Printf("%s\n", result) }
五、Golang生成随机字符串
生成随机字符串在一些应用中非常有用,可以使用Golang中的math/rand和time包进行实现。
代码如下:
import ( "math/rand" "time" ) func init() { rand.Seed(time.Now().UnixNano()) } func generateRandomString(length int) string { letters := []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789") bytes := make([]rune, length) for i := range bytes { bytes[i] = letters[rand.Intn(len(letters))] } return string(bytes) } func main() { fmt.Println(generateRandomString(10)) // 输出 "vIoF8JcI0Z" }
六、Golang字符串排序
Golang中可以使用sort包进行字符串的排序,排序方式可以是正序(从小到大)或者倒序(从大到小)。
代码如下:
import ( "fmt" "sort" ) func main() { strs := []string{"c", "a", "b"} sort.Strings(strs) fmt.Println("Strings:", strs) sort.Sort(sort.Reverse(sort.StringSlice(strs))) fmt.Println("Reverse:", strs) }
七、Golang字符串转时间
Golang中可以使用time包进行字符串和时间类型之间的转换。
代码如下:
import ( "fmt" "time" ) func main() { str_time := "2022-10-01 01:02:03" layout := "2006-01-02 15:04:05" time_parse, err := time.Parse(layout, str_time) if err != nil { fmt.Println(err) } else { fmt.Println(time_parse) } }
八、Golang字符串转数组
Golang中可以使用strings包中的Split函数将字符串转为数组。
代码如下:
import ( "fmt" "strings" ) func main() { str := "a,b,c,d" // 使用Split函数将字符串转为数组 str_array := strings.Split(str, ",") fmt.Println(str_array) // 输出 ["a", "b", "c", "d"] }