【问题标题】:Loop Through Each Character in Golang [closed]遍历Golang中的每个字符[关闭]
【发布时间】:2021-05-05 13:20:06
【问题描述】:

我在 Go 中有一个变量字符串。如何检查当前字符是否等于下一个字符?

我的代码是这样的,但还是报错:

   message := "hhappy"

    for i, v := range message {
      if v[i] == v[i+1] {
        //print something
      }
    }

【问题讨论】:

    标签: loops go


    【解决方案1】:

    由于rune 可以大于单个字节(1 to 4 bytes),因此您无法真正检查切片中的下一项,因为某些字符(ASCII 除外)可能大于单个字节。这将使您的代码失败。

    一个正确的选择是迭代字符串元素,将每个字符与前一个字符进行比较。这样,如果 rune 重复出现,代码仍然可以工作。例如,

    func main() {
        var prev rune
        message := "hhappyèèaa"
        for i, v := range message {
            if prev == 0 {
                prev = v
                continue
            }
            if prev == v {
                fmt.Printf("previous char: %s curr pos: %v\n", string(v), i)
            }
            prev = v
        }
    }
    

    输出

    previous char: h curr pos: 1
    previous char: p curr pos: 4
    previous char: è curr pos: 8
    previous char: a curr pos: 11
    

    【讨论】:

      【解决方案2】:

      你不能使用 v[i],因为 v 是一个符文,当你的范围超过消息字符串时。

      可以使用以下代码:

        message := "tesssting"
        for i := 0; i < len(message)-2; i++ {
            if message[i] == message[i+1] {
               // print something
            }
        }
      

      【讨论】:

      • 这里不考虑多字节字符
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多