我正在尝试使用字符串替换多个不同的字符,Replacer
但是在替换一个字符串时遇到问题.输出有两个下划线而不是一个,如果我尝试使用其他替换Replacer
,那么它不能完全替换它.
试试Go Playground上的代码:
package main import ( "fmt" "strings" ) //Expecting output to be emp_my_stats func main() { var input string = "/v1.0/emp/emp_1/my_stats" replacer := strings.NewReplacer("/v1.0/", "", "/", "_", "emp_1", "") // replacer := strings.NewReplacer("/v1.0/", "", "/", "_", "/emp_1", "") output := replacer.Replace(input) fmt.Printf("output %v", output) }
我可以使用多个Replacer
等但是真的想在一个通道/或一个语句中执行它.
有什么建议干净利落的吗?我的目标是提高效率(这将经常完成,虽然这些字符串很短很重要),也不会使用多个Replacer
s.
您尚未指定任何其他可能的输入,但它看起来如下:
input := "/v1.0/emp/emp_1/my_stats"
您需要与下划线连接的部件"emp"
和"my_stats"
部件'_'
.而你尝试的替代品来看,"/v1.0/"
和"/emp_1/"
部分是静态的,所以你可以简单地做这一个替代品:
replacer := strings.NewReplacer("/v1.0/", "", "/emp_1/", "_")
完整的例子:
input := "/v1.0/emp/emp_1/my_stats" replacer := strings.NewReplacer("/v1.0/", "", "/emp_1/", "_") output := replacer.Replace(input) fmt.Println("Output:", output)
输出(在Go Playground上试试):
Output: emp_my_stats
笔记:
你提到你必须经常这样做,你希望这是有效的.因此,请确保只创建一个Replacer
,并在需要进行替换时重用它(例如,您可以将其存储在初始化一次的全局变量中).根据您的输入判断,它看起来像是某个URL的路径,并且您最希望这样做的是HTTP处理程序,它可以在多个goroutine上并发运行.Replacer
从多个goroutines中使用它是安全的,引用来自以下文档Replacer
:
多个goroutine可以安全地同时使用.
注释#2:
如果输入中的"/v1.0/"
和"/emp_1/"
部分不是静态的,则无法用a真正解决问题Replacer
.在这种情况下,您可以使用正则表达式或作为更有效的解决方案,拆分字符串'/'
并将相关部分连接起来'_'
.