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个字符.
一个简单的方法,没有正则表达式的东西:
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)