上一篇我們已經知道go語言中的 fmt包的常用佔位符
今天介紹go的數據類型的字符串
Go語言中 字符串和字符是有區別的
- 字符串:用雙引號包裹起來的 都是字符串 如
"hello world"
- 字符:用單引號包裹起來的都是字符(字符就是一個字母 漢字 符號) 一個字符等於一個字節 ,字符通常都是int32 如
'H'
以下符號需要轉移
也就是要以這些作爲字符作爲輸出結果的時候
需要進行斜槓的加持才能正常輸出
\r 回車符
\n 換行符
\t 製表符
\' 單引號
\" 雙引號
\\ 斜槓
字符串/字符普通定義用法
//字符串
str := "zzs"
//字符
c := 'z'
定義多行字符串
str2 := `
hello
world
`
代碼示例
新建一個文件夾string 文件夾下新建main.go 編寫以下代碼:
package main
import "fmt"
func main(){
//輸出某個文件夾的具體路徑 D:\goLearn\src\start
str := "D:\\goLearn\\src\\start"
fmt.Printf("%s \n",str)
//輸入字符串 i 'm ok
str2 := "i 'm OK"
fmt.Printf("%s \n",str2)
//多行字符串
str3 := `
my
name
is
zhangzeshan
`
fmt.Printf("%s \n",str3)
}
字符串長度
使用len()
函數
//用法
strLen := "zhangzeshan"
fmt.Println(len(strLen)) //11
字符串拼接
name := "learn"
world := "Go"
//方法1
fmt.Println(name+world)
//方法2
fmt.Printf("%s%s \n",name,world)
//方法3
third := fmt.Sprintf("%s%s\n",name,world)
fmt.Println(third)
//這裏需要注意一個在此之前都沒見過的函數 Sprintf
//這個函數的值輸出 是需要一個變量去接收的
字符串分割
字符串的分割 需要導入一個strings
包
導入多個包寫法如下
import(
"fmt"
"strings"
)
導入之後 需要調用這個包的函數 Split()
使用方法如下:
str := "D:\\goLearn\\src\\start"
//參數1 要處理的字符串
//參數2 要以哪個字符串進行切割
//如題:以\\進行切割str
sp := string.Split(str,"\\")
fmt.Println(sp) // [D: goLearn src start]
fmt.Printf("%T \n",sp) //類型是 切片 後續會單獨講到
字符串是否包含某個字符串
同樣也是需要用到strings
包
如果擁有就返回 true
否則返回false
str := "D:\\goLearn\\src\\start"
//參數1 要處理的字符串
//參數2 是否含有哪個字符串
sc := strings.Contains(str,"s")
fmt.Println(sc)
前綴/後綴
str := "D:\\goLearn\\src\\start"
//某個字符串的前綴是否存在某個字符
hasPrefix := strings.HasPrefix(str,"D")
//某個字符串的後綴是否存在某個字符
hasSUffix := strings.HasSuffix(str,"t")
fmt.Println(hasPrefix)
fmt.Println(hasSUffix)
某個字符串在字符串中出現的位置
newStr := "abcdef"
//從左到右 某個字符串首次出現的位置 從0開始
fmt.Println(strings.Index(newStr,"c"))
//從右到左 某個字符串首次出現的位置 從1開始
fmt.Println(strings.LastIndex(newStr,"d"))
使用Join將零散字符串拼接起來
這裏的拼接跟上面提到的有區別的是 Join()
操作的是切片類型
而我們的上面提到的是字符串類型
關於切片類型後續會講到!
str := "D:\\goLearn\\src\\start"
sp := strings.Split(str, "\\")
//將切片的內容 通過 - 拼接
fmt.Println(strings.Join(sp,"-")) //D:-goLearn-src-start
字符串的修改
對字符串的修改 我們需要處理成切片
的形式 才能進行操作
在這裏 暫時不對切片進行展開描述
我們可以把他理解成一個數組 通過代碼來解釋吧!
示例
//要把u1的第一個字符改成a
u1 := "black"
//將u1轉換成切片
u2 := []string(u1)
//進行賦值處理 這裏的原理 跟數組一樣 下標也是從0開始
//這裏需要注意 賦值的值不是字符串 而是字符
u2[0] = 'a'
//轉成string類型
fmt.Println(string(u2)) //alack
關於rune
此時切片內部的值是數字 因此 上面的地方纔需要轉換成string類型
u3 := "紅色"
fmt.Println([]rune(u3)) //[32418 33394]
關於用rune的時候爲什麼用的是單引號的字符進行操作
我們通過打印兩個數據的類型就知道爲什麼了
可以看到雙引號的字符串和單引號的字符的對應的數據類型是不一樣的
而rune轉換之後的值是數字 因此需要單引號
cc1 := "紅"
cc2 := '紅'
fmt.Printf("%T \n",cc1) //string
fmt.Printf("%T \n",cc2) //int32
那麼不是中文值的情況 字符串和字符的類型是否一樣呢?
答案是否定的!
cc3 := "H"
cc4 := 'H'
fmt.Printf("%T \n",cc3) //string
fmt.Printf("%T \n",cc4) //int32
總結
字符串和字符在任何情況下 他們的類型都是不一樣的 前者爲string
後者爲int32
關於字符串的介紹就到這裏 有不清楚和有爭議的地方可以在評論區留言!
未完待續。。。