Skip to content

Commit

Permalink
feat: add LastString() and FirstString()
Browse files Browse the repository at this point in the history
  • Loading branch information
fufuok committed Oct 30, 2024
1 parent bc22788 commit b58d374
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 0 deletions.
18 changes: 18 additions & 0 deletions strings.go
Original file line number Diff line number Diff line change
Expand Up @@ -363,3 +363,21 @@ func TruncStr(s string, maxLen int, suffix string) string {
}
return s[:i] + suffix
}

// LastString 获取文本内容最后一个分隔符(单字节: sep[0])后的内容
func LastString(s, sep string) string {
idx := strings.LastIndex(s, sep)
if idx != -1 && idx+1 < len(s) {
return s[idx+1:]
}
return ""
}

// FirstString 获取文本内容第一个分隔符(单字节: sep[0])前的内容
func FirstString(s, sep string) string {
idx := strings.Index(s, sep)
if idx != -1 {
return s[:idx]
}
return ""
}
59 changes: 59 additions & 0 deletions strings_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -632,3 +632,62 @@ func TestTruncStr(t *testing.T) {

assert.NotEqual(t, TruncStr(ss, 10, ""), ss[:10])
}

func TestLastString(t *testing.T) {
t.Parallel()
ss := "Hello,世界!😄,f f"
for _, tt := range []struct {
sep string
want string
}{
{",", "f f"},
{"H", "ello,世界!😄,f f"},
{"o", ",世界!😄,f f"},
{" ", "f"},

// 注意:
{"el", "llo,世界!😄,f f"},

{",,", ""},
{"E", ""},
{"f", ""},
} {
assert.Equal(t, tt.want, LastString(ss, tt.sep))
}

assert.NotEqual(t, ",f f", LastString(ss, "😄"))
assert.Equal(t, "\nc", LastString("a\n\nb\n\nc", "\n\n"))

assert.Equal(t, "c", LastString("a\nb\nc", "\n"))
assert.Equal(t, "", LastString("a\nb\nc\n", "\n"))
assert.Equal(t, "c", LastString(strings.TrimSpace("a\nb\nc\n"), "\n"))
}

func TestFirstString(t *testing.T) {
t.Parallel()
ss := "Hello,世界!😄,f f"
for _, tt := range []struct {
sep string
want string
}{
{",", "Hello,世界!😄"},
{"o", "Hell"},
{" ", "Hello,世界!😄,f"},

// 注意:
{"el", "H"},

{",,", ""},
{"E", ""},
{"H", ""},
} {
assert.Equal(t, tt.want, FirstString(ss, tt.sep))
}

assert.Equal(t, "Hello,世界!", FirstString(ss, "😄"))
assert.Equal(t, "a", FirstString("a\n\nb\n\nc", "\n\n"))

assert.Equal(t, "a", FirstString("a\nb\nc", "\n"))
assert.Equal(t, "", FirstString("\na\nb\nc", "\n"))
assert.Equal(t, "a", FirstString(strings.TrimSpace("\na\nb\nc\n"), "\n"))
}

0 comments on commit b58d374

Please sign in to comment.