Go- 字符串处理
发布于: 2 小时前
Go 学习笔记,学习内容《Go入门指南》
主要介绍以下内容:
字符串前缀和后缀
字符串包含
字符串位置
字符串替换
字符串出现次数
字符串重复
字符串大小写转换
字符串修剪
字符串分割
字符串拼接
字符串内容读取
字符串与其他类型转换
代码示例可以直接运行
package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
var s string = "I have a dream"
/*
字符串前缀和后缀
*/
fmt.Println(strings.HasPrefix(s, "I")) // 输出:true
fmt.Println(strings.HasPrefix(s, "You")) // 输出:false
fmt.Println(strings.HasSuffix(s, "dog")) // 输出:false
fmt.Println(strings.HasSuffix(s, "dream")) // 输出:true
/*
字符串包含
*/
fmt.Println(strings.Contains(s, "have")) // 输出:true
fmt.Println(strings.Contains(s, "has")) // 输出:false
/*
字符串位置
*/
fmt.Println(strings.Index(s, "a")) // 输出:3
fmt.Println(strings.Index(s, "drea")) // 输出:9
fmt.Println(strings.Index(s, "hello")) // 输出:-1
fmt.Println(strings.LastIndex(s, "a")) // 输出:12
fmt.Println(strings.LastIndex(s, "an")) // 输出:-1
fmt.Println(strings.Index("人生自古谁无死", "谁")) // 12
//fmt.Println(strings.IndexRune("Hi There", "e")) // 编译错误: cannot use "e" (type untyped string) as type rune in argument to strings.IndexRune ?
/*
字符串替换
*/
//fmt.Println(strings.Replace("you said you do not know", "you", "I")) // 编译错误:not enough arguments in call to strings.Replace
fmt.Println(strings.Replace("you said you do not know", "you", "I", -1)) // 输出:I said I do not know
fmt.Println(strings.Replace("you said you do not know", "you", "I", 0)) // 输出:you said you do not know
fmt.Println(strings.Replace("you said you do not know", "you", "I", 1)) // 输出:I said you do not know
fmt.Println(strings.Replace("you said you do not know", "you", "I", 2)) // 输出:I said I do not know
fmt.Println(strings.Replace("you said you do not know", "you", "I", 3)) // 输出:I said I do not know
/*
字符串出现次数
*/
fmt.Println(strings.Count("abcdefgabc", "abc")) // 输出:2
fmt.Println(strings.Count("abcdefgabc", "a")) // 输出:2
fmt.Println(strings.Count("abcdefgabc", "w")) // 输出:0
/*
字符串重复
*/
fmt.Println(strings.Repeat("abc", 0)) // 输出:空字符串
fmt.Println(strings.Repeat("abc", 1)) // 输出:abc
fmt.Println(strings.Repeat("abc", 3)) // 输出:abcabcabc
//fmt.Println(strings.Repeat("abc", -1)) // 编译错误:panic: strings: negative Repeat count
/*
字符串大小写转换
*/
fmt.Println(strings.ToLower("")) // 输出:空字符串
fmt.Println(strings.ToLower("abc")) // 输出:abc
fmt.Println(strings.ToLower("ABC")) // 输出:abc
fmt.Println(strings.ToLower("Abc")) // 输出:abc
fmt.Println(strings.ToLower("中国")) // 输出:中国
fmt.Println(strings.ToUpper("")) // 输出:空字符串
fmt.Println(strings.ToUpper("abc")) // 输出:ABC
fmt.Println(strings.ToUpper("ABC")) // 输出:ABC
fmt.Println(strings.ToUpper("Abc")) // 输出:ABC
fmt.Println(strings.ToUpper("中国")) // 输出:中国
/*
字符串修剪
*/
fmt.Println(strings.TrimSpace(" AB C ")) // 输出:AB C-- 清除首尾空格
fmt.Println(strings.Trim("ABcdABefgAB", "AB")) // 输出:cdABefg--清除首尾指定字符串
fmt.Println(strings.TrimLeft("AbcdA", "A")) // 输出:bcdA--清除首部指定字符串
fmt.Println(strings.TrimRight("AbcdB", "B")) // 输出:Abcd--清除尾部字符串
fmt.Println(strings.TrimLeft(" AB C ", " ")) // 输出:AB C
fmt.Println(strings.TrimRight(" AB C ", " ")) // 输出: AB C
/*
字符串分割
*/
slice1 := strings.Fields("Marry Alice Jack Mark") // 将字符串按照空格分割
for i := 0; i < len(slice1); i++ {
fmt.Printf("%s, ", slice1[i]) // 输出:Marry, Alice, Jack, Mark,
}
fmt.Printf("\n")
slice2 := strings.Split("Marry,Alice,Jack,Mark", ",") // 将字符串按照自定义分隔符分割
for i := 0; i < len(slice2); i++ {
fmt.Printf("%s ", slice2[i]) // 输出:Marry Alice Jack Mark
}
fmt.Printf("\n")
/*
字符串拼接
*/
fmt.Println(strings.Join(slice2, "|")) // 输出:Marry|Alice|Jack|Mark
/*
字符串内容读取
*/
r := strings.NewReader("abcdefghijklmn")
var buf []byte
buf = make([]byte, 5)
readlen, _ := r.Read(buf) // 读取字符串长度为buf长度
fmt.Println(buf, readlen) // 输出:[97 98 99 100 101] 5
b, _ := r.ReadByte() // 读取一个字符
fmt.Println(b) // 输出:102
/*
字符串与其他类型转换
1、任何类型转换为字符串都会成功
2、字符串只能转换为部分类型
*/
//strconv.IntSize = 32 // 编译错误:cannot assign to strconv.IntSize (declared const)
fmt.Println(strconv.IntSize) // 常量strconv.IntSize表示当前OS下 int 类型长度
fmt.Println(strconv.Itoa(61)) // 输出:字符串61
fmt.Println(strconv.FormatFloat( // 输出:字符串3.22200
3.222, // 待转换的数字
'f', // 当前数字的格式,可选:b e f g
5, // 精度,即小数点后多少位
64)) // 当前数字是float32还是float64,可选:32 64
num1, err := strconv.Atoi("H")
if err != nil { // 输出:error: strconv.Atoi: parsing "H": invalid syntax
fmt.Println("error: ", err)
}
fmt.Println(num1) // 输出:0
num2, _ := strconv.Atoi("8")
fmt.Println(num2) // 输出:8
n1, _ := strconv.ParseFloat(
"3.1415926", // 待转换的字符串
32) // 转换的数字类型是float32还是float64,可选:32 64
fmt.Println(n1) // 输出:3.141592502593994
n2, err := strconv.ParseFloat("hello", 64)
if err != nil { // 输出:error: strconv.ParseFloat: parsing "hello": invalid syntax
fmt.Println("error: ", err)
}
fmt.Println(n2) // 输出:0
}
复制代码
划线
评论
复制
发布于: 2 小时前阅读数: 2
版权声明: 本文为 InfoQ 作者【HelloBug】的原创文章。
原文链接:【http://xie.infoq.cn/article/b87cfda9b5f19dea7c439819d】。
本文遵守【CC BY-NC-ND】协议,转载请保留原文出处及本版权声明。
HelloBug
关注
还未添加个人签名 2018.09.20 加入
还未添加个人简介
评论