开发者学堂课程【Go 语言核心编程 - 基础语法、数组、切片、Map: Go 字符串函数详解(2)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/625/detail/9616
Go 字符串函数详解(2)
一、编写代码
1. 返回子串在字符串最后一次出现的 index,如没有返回 -1 : strings.LastIndex("go golang" .“go”)
(1) 如果想返回子串在字符串最后出现的一个位置,上一点是返回第一个出现的位置,这个是返回最后出现的位置,可以用 LastIndex,前面讲过既然能得到第一个出现的位置,那也能得到最后一个出现的位置
(2) 案例代码:
package main
import (
"fmt"
)
func main(){
index = strings.LastIndex( "go golang", "go")//3
fmt.Printf( "index=%vin",index)
}
(3) 输出结果:
index=3
(4) 代码分析:
index = strings.LastIndex( "go golang", "go")
里面有个 go,可以得到 go在 go golang 这个字符串里面出现的 index 是多少,就要用 LastIndex 来处理,用 index 来接收,从代码的分析看输出的结果应该是 3,运行代码后发现输出结果也是 3,完全正确,这就是求最后一次返回的位置。
2. 将指定的子串替换成另外一个子串: string.Replace("go go hello" , "go"
, "go 语言" , n) n 可以指定你希望替换几个,如果 n=-1 表示全部替换
(1) Replace 这个函数中的 go 就是想要替换的,把 go 替换成 go 语言,后面的 n是指定你希望替换几个。例如 n=1,则替换第一个,如果想全部替换,就讲 n=-1
(2) 关键代码:
package main
import (
"fmt"
)
func main(){
str = strings.Replace( "go go hello", "go",“北京",1)
fmt.Printf( "str=%v\n", str)
}
(3) 输出结果:
str=北京 go hello
(4) 代码分析:
上面代码中把 go 换成 go 语言,第一个 go 就会变成 go 语言,第二个 go 就不会改变,只会改变一个。如果把 go 语言改成北京,那第一个 go 就变成北京,第二个 gou 不变。运行结果与分析结果一致,如果想换两个,就把后面的 1 改成 2,全部换就改成 -1,写 -1,所有的 go 都会变成北京。go go hello 实际上也可以是一个变量,str2 = "go go hello"
可以把字符串直接放到变量中,效果也是一样。替换完之后 str2 是不会变化,将 str2替换完之后返回一个新串,就 str 是一个新串,str2 本身并没有发生变化,也就是前面的串没有发生变化。
3. 按照指定的某个字符,为分割标识,将一个字符串拆分成字符串数组:strings.Split("hello,wrold,ok".".")
(1) 给了一个字符串 hello,wrold,ok,但是想把这个字符串按后面指定的字符进行一个拆分,拆分成一个新的字符串。
(2) 代码如下:
package main
import (
"fmt"
)
func main(){
//按照指定的某个字符,为分割标识,将一个字符串拆分成字符串数组:
//strings.split( "hello,wrold,ok", ",")
strArr := strings.split( "hello,wrold,ok", ",")
for i :=0; i < len(strArr); i++ {
fmt.Printf"strArr=%v\n", strArr[i])
}
(3) 输出结果:
str[0]=hello
str[1]=wrold
str[2]=ok
(4) 代码分析:
上面代码中 "hello,wrold,ok" 里面有两个逗号,然后外面的一个逗号意思是按这个逗号进行拆分,也就是说这个数组会有 3 个元素,一个是 hello,一个是 wrold,一个是 ok,因为是按照逗号进行拆分的。可以看到结果是一样的,可以对结果进行遍历 for i :=0; i < len(strArr); i++
。如果有一种需求,需要将字符串进行某一种方式的拆分得到一个数组,就可以用 split, "hello,wrold,ok" 也可以是一个字符串的变量,不会改变字符串本身,而是进行拆分形成一个数组过后,得到一个新的数组。本身不会改变字符串,也前一点所讲的 Replace 是一样,如果要改变的会,要传一个引用进去,但这里传的是一个子拷贝。
4. 将字符串的字母进行大小写的转换: strings.ToLower("Go")
//go strings.ToUpper("Go")
// Go
(1) 在进行密码验证的时候,想要不区分大小写,统一进行验证,可以先把 ToLower 进行大小写的转换。
(2) 案例代码:
package main
import (
"fmt"
)
func main(){
//将字符串的字母进行大小写的转换:
/ /strings.ToLower( "Go")
//go strings.Toupper( "Go") // Go
str = "goLang Hello"
str = strings.ToLower(str)
str = strings.ToUpper(str)
fmt.Printf( "str=%v\n", str)
//golang hello
}
(3) 输出结果:
GOLANG HELLO
(4) 代码分析:
上述代码中,有个字符串 str = "goLang Hello",这个字符串中有小写的字母,也有大写的字母,想要把它统一换成小写的字母,直接把字符串变量放到参数里面去,同时把返回的结果给了 str,意味着 goLang Hello 也会被改变。以前是给一个新的变量,现在是直接把返回的结果给它。如果将全部改成大写,将 ToLower 改成 ToUpper,再执行输出的结果是 GOLANG HELLO。