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

vij*_*jay 4 string replace go

package main

import (
    "fmt"
    "strings"
)

func main() {
    fmt.Println(strings.Replace("golang", "g", "1", -1))
}
Run Code Online (Sandbox Code Playgroud)

如何替换字符串中的所有字符"golang"(上面的字符串)*应该是什么样子"******"

icz*_*cza 13

通过替换所有字符,您将得到string具有相同字符数的字符,但所有字符都是'*'.所以简单地构造一个string具有相同字符长度但都是如此'*'.strings.Repeat()可以重复一次string(通过连接它):

ss := []string{"golang", "pi", "??"}
for _, s := range ss {
    fmt.Println(s, strings.Repeat("*", utf8.RuneCountInString(s)))
}
Run Code Online (Sandbox Code Playgroud)

输出(在Go Playground上试试):

golang ******
pi **
?? **
Run Code Online (Sandbox Code Playgroud)

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

例如以下行:

fmt.Println(len("??"), utf8.RuneCountInString("??")) // Prints 6 2
Run Code Online (Sandbox Code Playgroud)

打印6 2为字符串"??"需要6个字节进行编码(UTF-8),但它只有2个字符.


pho*_*zed 8

一个简单的方法,没有正则表达式的东西:

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

package main

import (
    "fmt"
    "strings"
)

func main() {
    fmt.Println(strings.Repeat("*", utf8.RuneCountInString("golang")))
}
Run Code Online (Sandbox Code Playgroud)

你可能最初想的更多的东西:

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

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile(".")
    fmt.Println(re.ReplaceAllString("golang", "*"))
}
Run Code Online (Sandbox Code Playgroud)

  • 似乎应该将icza的答案设置为已接受,因为它考虑到字符串可能具有多字节符文 (2认同)