How to reverse a string in Go?

前端 未结 28 1980
天涯浪人
天涯浪人 2020-12-04 06:45

How can we reverse a simple string in Go?

28条回答
  •  长情又很酷
    2020-12-04 07:30

    If you need to handle grapheme clusters, use unicode or regexp module.

    package main
    
    import (
      "unicode"
      "regexp"
    )
    
    func main() {
        str := "\u0308" + "a\u0308" + "o\u0308" + "u\u0308"
        println("u\u0308" + "o\u0308" + "a\u0308" + "\u0308" == ReverseGrapheme(str))
        println("u\u0308" + "o\u0308" + "a\u0308" + "\u0308" == ReverseGrapheme2(str))
    }
    
    func ReverseGrapheme(str string) string {
    
      buf := []rune("")
      checked := false
      index := 0
      ret := "" 
    
        for _, c := range str {
    
            if !unicode.Is(unicode.M, c) {
    
                if len(buf) > 0 {
                    ret = string(buf) + ret
                }
    
                buf = buf[:0]
                buf = append(buf, c)
    
                if checked == false {
                    checked = true
                }
    
            } else if checked == false {
                ret = string(append([]rune(""), c)) + ret
            } else {
                buf = append(buf, c)
            }
    
            index += 1
        }
    
        return string(buf) + ret
    }
    
    func ReverseGrapheme2(str string) string {
        re := regexp.MustCompile("\\PM\\pM*|.")
        slice := re.FindAllString(str, -1)
        length := len(slice)
        ret := ""
    
        for i := 0; i < length; i += 1 {
            ret += slice[length-1-i]
        }
    
        return ret
    }
    

提交回复
热议问题