当前位置:  开发笔记 > 编程语言 > 正文

Strings.Replacer:如何一次替换所有子串?

如何解决《Strings.Replacer:如何一次替换所有子串?》经验,为你挑选了1个好方法。

我正在尝试使用字符串替换多个不同的字符,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等但是真的想在一个通道/或一个语句中执行它.

有什么建议干净利落的吗?我的目标是提高效率(这将经常完成,虽然这些字符串很短很重要),也不会使用多个Replacers.



1> icza..:

您尚未指定任何其他可能的输入,但它看起来如下:

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.在这种情况下,您可以使用正则表达式或作为更有效的解决方案,拆分字符串'/'并将相关部分连接起来'_'.

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有