如何替换同一个字符串中的多个字符?

Mic*_*sch 6 string go

我一般不太精通编程,所以请在这里放我一马。\n有没有更优雅的方法来解决替换字符串中多个字符的过程?

\n
strings.ReplaceAll(strings.ReplaceAll(strings.ReplaceAll(strings.ReplaceAll(strings.ReplaceAll(strings.ReplaceAll(strings.ReplaceAll(strings.ReplaceAll(strings.ReplaceAll(godiacritics.Normalize(strings.ToLower(articles[i].Name)), "-", "_"), " ", "_"), ",", "_"), ".", ""), "/", ""), "\xe2\x82\xac", ""), "%", ""), "12", "halb"), "14", "viertel")\n
Run Code Online (Sandbox Code Playgroud)\n

icz*_*cza 14

创建一个strings.Replacer包含所有可替换对的单个:

\n
r := strings.NewReplacer(\n    "-", "_",\n    " ", "_",\n    ",", "_",\n    ".", "",\n    "/", "",\n    "\xe2\x82\xac", "",\n    "%", "",\n    "12", "halb",\n    "14", "viertel",\n)\n
Run Code Online (Sandbox Code Playgroud)\n

并像这样使用它:

\n
s2 := r.Replace(godiacritics.Normalize(strings.ToLower(articles[i].Name)))\n
Run Code Online (Sandbox Code Playgroud)\n

strings.Replacer在一个步骤中执行所有替换(它迭代字符串一次)。它对于并发使用也是安全的,创建Replacer一次并在需要时/任何地方重复使用它。

\n

测试它的示例代码:

\n
s := "test- ,./\xe2\x82\xac%:12 14"\ns2 := strings.ReplaceAll(strings.ReplaceAll(strings.ReplaceAll(strings.ReplaceAll(strings.ReplaceAll(strings.ReplaceAll(strings.ReplaceAll(strings.ReplaceAll(strings.ReplaceAll(s, "-", "_"), " ", "_"), ",", "_"), ".", ""), "/", ""), "\xe2\x82\xac", ""), "%", ""), "12", "halb"), "14", "viertel")\nfmt.Println(s2)\n\nr := strings.NewReplacer(\n    "-", "_",\n    " ", "_",\n    ",", "_",\n    ".", "",\n    "/", "",\n    "\xe2\x82\xac", "",\n    "%", "",\n    "12", "halb",\n    "14", "viertel",\n)\n\ns3 := r.Replace(s)\nfmt.Println(s3)\n
Run Code Online (Sandbox Code Playgroud)\n

哪个输出(在Go Playground上尝试):

\n
test___:halb_viertel\ntest___:halb_viertel\n
Run Code Online (Sandbox Code Playgroud)\n