立即删除重复的字符

时间:2018-01-20 19:03:39

标签: go

我正在尝试删除紧随其后的重复字符。

E.g。 " Whyyyy sooo ssserioooouussss"应该转换为"为什么这么严重"

在PHP PCRE中,这可能是这样的

$text = preg_replace("/(.)\\1+/", "$1", $text);

我试着做以下

var duplicateRegex = regexp.MustCompile(`(?P<char>.)${char}+`)
text = duplicateRegex.ReplaceAllString(text, `${char}`)

Test on play.golang.com

但它似乎不起作用。有任何想法吗? 谢谢

2 个答案:

答案 0 :(得分:1)

尝试以下代码。它符文符文符文符文。如果符文与上一个符文不同,或者它是第一个符文,则将符文添加到结果中。

func removeDups(s string) string {
    var buf bytes.Buffer
    var last rune
    for i, r := range s {
        if r != last || i == 0 {
            buf.WriteRune(r)
            last = r
        }
    }
    return buf.String()
}

在Go 1.10中,bytes.Buffer可以替换为strings.Builder,以最大限度地减少分配。

答案 1 :(得分:0)

试试这个:

str := "Whyyyy sooo ssserioooouuussss 日本語語語"
fmt.Println(str)
var buf bytes.Buffer
var pc rune
for i, c := range str {
    if i ==  0{
        pc = c
        buf.WriteRune(c)
    }

    if pc == c {
        continue
    }

    pc = c
    buf.WriteRune(c)
}
fmt.Println(buf.String())

结果:

Whyyyy sooo ssserioooouuussss 日本語語語
Why so serious 日本語