教程 > go 教程 > 阅读:188

go 语言字符串详解——迹忆客-ag捕鱼王app官网

本章节对go语言中的字符串进行一个详解。

在 go 编程中广泛使用的字符串是只读的字节片。在 go 编程语言中,字符串本质上是切片(slice)。go 平台提供了多种多样的库来操作字符串。

  • unicode
  • regexp
  • strings

创建字符串

创建字符串的最简单的方法就是给变量直接赋值一个字符串

var greeting = "hello world!"

下面让我们看一个简单的示例

package main
import (  
    "fmt"
)
func main() {  
    greeting := "hello world!"
    fmt.println(name)
}

上述代码编译执行结果如下

hello world!

每当在代码中遇到字符串文字时,编译器都会创建一个字符串对象,在这种情况下,它的值是“hello world!”。

字符串字面量包含一个有效的 utf-8 序列,称为符文。字符串包含任意字节。

package main
import "fmt"
func main() {
   var greeting =  "hello world!"
   
   fmt.printf("normal string: ")
   fmt.printf("%s", greeting)
   fmt.printf("\n")
   fmt.printf("hex bytes: ")
   
   for i := 0; i < len(greeting); i   {
       fmt.printf("%x ", greeting[i])
   }
   
   fmt.printf("\n")
   const sampletext = "\xbd\xb2\x3d\xbc\x20\xe2\x8c\x98" 
   
   /*q标志转义不可打印字符,使用 标志转义非ascii字符的字符,以使输出明确无误 */
   fmt.printf("quoted string: ")
   fmt.printf("% q", sampletext)
   fmt.printf("\n")  
}

上述代码执行结果如下

normal string: hello world!
hex bytes: 48 65 6c 6c 6f 20 77 6f 72 6c 64 21 
quoted string: "\xbd\xb2=\xbc \u2318"

注意- 字符串文字是不可变的,因此一旦创建字符串文字就无法更改。


访问字符串的单个字节

由于字符串是字节的切片,因此可以对字符串的每一个字节进行访问。

package main
import (  
    "fmt"
)
func printbytes(s string) {  
    fmt.printf("bytes: ")
    for i := 0; i < len(s); i   {
        fmt.printf("%x ", s[i])
    }
}
func main() {  
    greeting := "hello world!"
    fmt.printf("string: %s\n", greeting)
    printbytes(greeting)
}

%s 是打印字符串的格式说明符。len(s) 返回字符串中的字节数,我们使用for 循环以十六进制表示法打印这些字节。%x 是十六进制的格式说明符。

上述代码编译执行结果如下

string: hello world  
bytes: 48 65 6c 6c 6f 20 57 6f 72 6c 64  

访问字符串的单个字符

让我们稍微修改一下上面的程序来打印字符串的字符。

package main
import (  
    "fmt"
)
func printbytes(s string) {  
    fmt.printf("bytes: ")
    for i := 0; i < len(s); i   {
        fmt.printf("%x ", s[i])
    }
}
func printchars(s string) {  
    fmt.printf("characters: ")
    for i := 0; i < len(s); i   {
        fmt.printf("%c ", s[i])
    }
}
func main() {  
    greeting := "hello world!"
    fmt.printf("string: %s\n", greeting)
    printchars(greeting)
    fmt.printf("\n")
    printbytes(greeting)
}

上述代码编译执行结果如下

string: hello world!
characters: h e l l o   w o r l d ! 
bytes: 48 65 6c 6c 6f 20 57 6f 72 6c 64 21 

警告:虽然上面的程序看起来是访问字符串单个字符的合法方式,但这有一个严重的错误。上面的程序没有考虑字符串中一个字符占多字节的情况,例如 中文。这种情况我们会在后面的章节中单独介绍,然后给出ag捕鱼王app官网的解决方案。这里大家也可以自己尝试解决。


字符串长度

len(str) 方法返回字符串文字中包含的字节数。

package main
import "fmt"
func main() {
   var greeting =  "hello world!"
   
   fmt.printf("字符串长度是: ")
   fmt.println(len(greeting))  
}

上述代码执行结果如下

字符串长度是:12

连接字符串

strings 包中有一个用于连接多个字符串的方法 join

strings.join(sample, " ")

join 连接数组的元素以创建单个字符串。第二个参数是分隔符,它位于数组元素之间。

让我们看看下面的例子

package main
import ("fmt" "math" )"fmt" "strings")
func main() {
   greetings :=  []string{"hello","world!"}   
   fmt.println(strings.join(greetings, " "))
}

上述代码编译执行结果如下

hello world!

查看笔记

扫码一下
查看教程更方便
网站地图