Golang中字符串方法:/、//、%的使用技巧
Golang中字符串方法:/、//、%的使用技巧 / - “str1”/“str2”:在 Go 中不可行。需要将其用作 matchAll、match、filter、filterAll。 % - “str1” % “str2”:需要用于在移除给定的搜索项后进行分割或过滤 # 根据传入方法的变量进行扩展 // - %% - 就这么想。所以分享出来。谢谢。我们在所有不同的语言中都有这个(/、%、/)。
2 回复
我不明白你想要什么。
老实说,在我迄今为止使用过的所有编程语言中,我只见过 % 作为字符串上的二元运算符,那是在 Python 中,它基本上就是 fmt.Sprintf。
func main() {
fmt.Println("hello world")
}
更多关于Golang中字符串方法:/、//、%的使用技巧的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在Go语言中,字符串操作通常使用标准库的strings和regexp包来实现。根据你的描述,你似乎想实现类似其他语言中的字符串匹配、过滤和分割操作。以下是一些示例代码,展示如何在Go中实现类似功能:
1. 使用 strings 包进行匹配和过滤
package main
import (
"fmt"
"strings"
)
func main() {
// 示例字符串
str1 := "hello world, hello golang"
str2 := "hello"
// 匹配所有出现的位置(类似 / 操作)
matches := strings.Count(str1, str2)
fmt.Printf("'%s' 在 '%s' 中出现了 %d 次\n", str2, str1, matches)
// 过滤掉所有匹配项(类似 % 操作)
filtered := strings.ReplaceAll(str1, str2, "")
fmt.Printf("移除 '%s' 后的结果: '%s'\n", str2, filtered)
// 分割字符串(类似 % 操作)
parts := strings.Split(str1, str2)
fmt.Printf("按 '%s' 分割的结果: %v\n", str2, parts)
}
2. 使用 regexp 包进行正则表达式匹配
package main
import (
"fmt"
"regexp"
)
func main() {
str1 := "hello123 world456 hello789"
pattern := `hello\d+`
// 编译正则表达式
re := regexp.MustCompile(pattern)
// 匹配所有(类似 // 操作)
allMatches := re.FindAllString(str1, -1)
fmt.Printf("所有匹配项: %v\n", allMatches)
// 匹配第一个(类似 / 操作)
firstMatch := re.FindString(str1)
fmt.Printf("第一个匹配项: %s\n", firstMatch)
// 过滤所有匹配项(类似 %% 操作)
filtered := re.ReplaceAllString(str1, "")
fmt.Printf("移除所有匹配项后的结果: '%s'\n", filtered)
// 分割字符串(类似 % 操作)
splitResult := re.Split(str1, -1)
fmt.Printf("按模式分割的结果: %v\n", splitResult)
}
3. 自定义函数实现更灵活的操作
package main
import (
"fmt"
"strings"
)
// 类似 / 操作:检查是否包含子串
func match(str, substr string) bool {
return strings.Contains(str, substr)
}
// 类似 // 操作:返回所有匹配位置
func matchAll(str, substr string) []int {
var positions []int
start := 0
for {
idx := strings.Index(str[start:], substr)
if idx == -1 {
break
}
positions = append(positions, start+idx)
start += idx + len(substr)
}
return positions
}
// 类似 % 操作:移除所有匹配项
func filterAll(str, substr string) string {
return strings.ReplaceAll(str, substr, "")
}
// 类似 %% 操作:分割字符串
func splitBySubstr(str, substr string) []string {
return strings.Split(str, substr)
}
func main() {
str := "go is great, go is fast, go is simple"
substr := "go"
fmt.Printf("是否包含 '%s': %v\n", substr, match(str, substr))
fmt.Printf("所有匹配位置: %v\n", matchAll(str, substr))
fmt.Printf("移除所有 '%s': %s\n", substr, filterAll(str, substr))
fmt.Printf("按 '%s' 分割: %v\n", substr, splitBySubstr(str, substr))
}
4. 使用闭包创建更通用的函数
package main
import (
"fmt"
"strings"
)
type StringOperator func(string, string) interface{}
func createMatcher() StringOperator {
return func(str, substr string) interface{} {
return strings.Contains(str, substr)
}
}
func createFilter() StringOperator {
return func(str, substr string) interface{} {
return strings.ReplaceAll(str, substr, "")
}
}
func main() {
matcher := createMatcher()
filter := createFilter()
str := "golang programming"
substr := "golang"
fmt.Printf("匹配结果: %v\n", matcher(str, substr))
fmt.Printf("过滤结果: %v\n", filter(str, substr))
}
这些示例展示了如何在Go中实现字符串的匹配、过滤和分割操作。Go语言虽然没有内置的/、//、%操作符来处理字符串,但通过strings和regexp包可以轻松实现类似功能。

