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语言中,字符串操作通常使用标准库的stringsregexp包来实现。根据你的描述,你似乎想实现类似其他语言中的字符串匹配、过滤和分割操作。以下是一些示例代码,展示如何在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语言虽然没有内置的///%操作符来处理字符串,但通过stringsregexp包可以轻松实现类似功能。

回到顶部