package main
import (
"fmt"
"strings"
)
func main() {
fmt.Println(strings.Replace("golang", "g", "1", -1))
}
如何将"golang"
字符串*
(字符串上方)中的所有字符替换为"******"
?{/ 1}}
答案 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", "*"))
}