【问题标题】:Question about indexing characters of strings关于字符串索引字符的问题
【发布时间】:2021-10-23 03:41:16
【问题描述】:

下面是我创建的程序,用于了解 Go 中字符串字符的索引是如何工作的:

package main

import "fmt"

func main() {
    vendor1 := "Cisco"
    fmt.Println(vendor1[0])  
    fmt.Println(vendor1[1:4]) 
    fmt.Println(vendor1[1:])  
    fmt.Println(vendor1[:])
}

输出:

C:\Golang\VARIABLE> go run .\variable.go
67
isc
isco
Cisco

令我困惑的是,Println(vendor1[0]) 返回的是数字 '67' 而不是 'C',为什么会这样?为什么它与返回所需字符的 Println(vendor1[1:4]) 、 Println(vendor1[1:]) 和 Println(vendor1[:]) 不同?

【问题讨论】:

    标签: string go


    【解决方案1】:

    Index expressionsslice expressions 不是一回事,不要混为一谈。

    与切片相反,索引返回一个byte,它是uint8 的类型别名,Println 只是打印出无符号整数。

    切片返回一个字符串,这就是Println输出文本的原因。

    【讨论】:

    • 谢谢,我明白了。我发现我需要在索引后使用 string() 将字节转换为字符串。
    【解决方案2】:

    要打印索引 0 处的值,请使用 fmt.Printf("%c\n", vendor1[0]) 而不是 fmt.Println(vendor1[0]),对于其他三个值,您可以使用 %sfmt.Printf(),因为它们是字符串。我将您的代码修改如下:

    package main
    
    import (
        "fmt"
    )
    
    func main() {
    
        vendor1 := "Cisco"
    
        fmt.Printf("%c\n", vendor1[0])
    
        fmt.Printf("%s\n", vendor1[1:4])
        fmt.Printf("%s\n", vendor1[1:])
        fmt.Printf("%s\n", vendor1[:])
    
    }
    

    输出:

    C
    isc
    isco
    Cisco
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      • 1970-01-01
      • 2019-02-18
      • 1970-01-01
      • 2020-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多