lancet icon indicating copy to clipboard operation
lancet copied to clipboard

strutil中是否可以增加SubBetween方法?

Open MrXionGe opened this issue 1 year ago • 3 comments

版本号:

v2.2.9

问题描述

strutil中是否可以增加SubBetween方法? 方法的思路大概是,截取指定字符串中间的内容,且不包含指定的字符串。

代码示例

package main

import (
	"fmt"
	"strings"
)

func main() {
	str := "abcdefgh"
	// 输出cde
	fmt.Println(SubBetween(str, "b", "f"))
}

// SubBetween 截取指定字符串中间的内容 且不包含指定的字符串
func SubBetween(str string, prefix string, suffix string) string {
	// 找到前缀字符串在原字符串中的位置
	prefixIndex := strings.Index(str, prefix)
	if prefixIndex == -1 {
		// 如果前缀不存在 则返回空字符串
		return ""
	}
	// 移动到前缀之后的索引位置
	prefixIndex += len(prefix)
	// 找到后缀字符串在原字符串中的位置
	suffixIndex := strings.Index(str, suffix)
	if suffixIndex == -1 || suffixIndex < prefixIndex {
		// 如果后缀不存在或者在后缀之前 则返回空字符串
		return ""
	}
	// 截取中间的字符串
	return str[prefixIndex:suffixIndex]
}

MrXionGe avatar Feb 04 '24 10:02 MrXionGe

ok, 可以提PR @MrXionGe

duke-git avatar Feb 04 '24 11:02 duke-git

ok, 可以提PR @MrXionGe

我可以吗?😂😂😂我只是刚刚入门Golang,说实话,我对自己的代码没有信心。我觉得您可以看下我这段代码片段的思路,然后以新特性的方式加入到新版本中。

MrXionGe avatar Feb 04 '24 15:02 MrXionGe

ok, 可以提PR @MrXionGe

我可以吗?😂😂😂我只是刚刚入门Golang,说实话,我对自己的代码没有信心。我觉得您可以看下我这段代码片段的思路,然后以新特性的方式加入到新版本中。

可以加入到新版本中,另外,可以用strings.Cut实现这个功能,参考以下代码:

func SubInBetween(str string, start string, end string) string {
	if _, after, ok := strings.Cut(str, start); ok {
		if before, _, ok := strings.Cut(after, end); ok {
			return before
		}
	}

	return ""
}

duke-git avatar Feb 05 '24 03:02 duke-git

v2.3.0已添加SubInBetween方法

duke-git avatar Mar 05 '24 07:03 duke-git