Loops 循环遍历Golang中的每个角色

Loops 循环遍历Golang中的每个角色,loops,go,Loops,Go,我在Go中有一个变量字符串。如何检查当前字符是否等于下一个字符 我的代码如下,但仍然有错误: message := "hhappy" for i, v := range message { if v[i] == v[i+1] { //print something } } 不能使用v[i],因为v是一个符文,当您的范围超过消息字符串时 可以使用以下代码: message := "tesssting

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

我的代码如下,但仍然有错误:

   message := "hhappy"

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

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

可以使用以下代码:

  message := "tesssting"
  for i := 0; i < len(message)-2; i++ {
      if message[i] == message[i+1] {
         // print something
      }
  }
消息:=“TESSTING”
对于i:=0;i
由于
符文
可以大于一个字节,因此无法真正检查切片中的下一项,因为某些字符(ASCII除外)可以大于一个字节。这将使您的代码失败

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

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

这不考虑多比特字符