如何在golang中替换字符串中的所有字符

时间:2016-04-29 05:32:10

标签: string go replace

package main

import (
    "fmt"
    "strings"
)

func main() {
    fmt.Println(strings.Replace("golang", "g", "1", -1))
}

如何将"golang"字符串*(字符串上方)中的所有字符替换为"******"?{/ 1}}

2 个答案:

答案 0 :(得分:12)

通过替换所有字符,您将获得具有相同字符数的string,但所有字符都为'*'。因此,只需构造一个具有相同字符长度的string,但都是'*'strings.Repeat()可以重复string(通过连接):

ss := []string{"golang", "pi", "世界"}
for _, s := range ss {
    fmt.Println(s, strings.Repeat("*", utf8.RuneCountInString(s)))
}

输出(在Go Playground上尝试):

golang ******
pi **
世界 **

请注意,len(s)为您提供UTF-8编码表单的长度,因为这是Go在内存中存储字符串的方式。您可以使用utf8.RuneCountInString()获取字符数。

例如以下一行:

fmt.Println(len("世界"), utf8.RuneCountInString("世界")) // Prints 6 2

打印6 2,因为字符串"世界"需要6个字节进行编码(以UTF-8格式),但它只有2个字符。

答案 1 :(得分:7)

一种简单的方法,可以不使用正则表达式:

https://play.golang.org/p/B3c9Ket9fp

package main

import (
    "fmt"
    "strings"
)

func main() {
    fmt.Println(strings.Repeat("*", utf8.RuneCountInString("golang")))
}

更像你最初想的那样:

https://play.golang.org/p/nbNNFJApPp

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile(".")
    fmt.Println(re.ReplaceAllString("golang", "*"))
}