mirror of
https://github.com/duke-git/lancet.git
synced 2026-02-17 11:12:28 +08:00
feat: add Ellipsis for string
This commit is contained in:
@@ -63,6 +63,7 @@ import (
|
|||||||
- [SubInBetween](#SubInBetween)
|
- [SubInBetween](#SubInBetween)
|
||||||
- [HammingDistance](#HammingDistance)
|
- [HammingDistance](#HammingDistance)
|
||||||
- [Concat](#Concat)
|
- [Concat](#Concat)
|
||||||
|
- [Ellipsis](#Ellipsis)
|
||||||
|
|
||||||
<div STYLE="page-break-after: always;"></div>
|
<div STYLE="page-break-after: always;"></div>
|
||||||
|
|
||||||
@@ -1563,4 +1564,38 @@ func main() {
|
|||||||
// Go Language
|
// Go Language
|
||||||
// An apple a day,keeps the doctor away
|
// An apple a day,keeps the doctor away
|
||||||
}
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### <span id="Ellipsis">Ellipsis</span>
|
||||||
|
|
||||||
|
<p>将字符串截断到指定长度,并在末尾添加省略号。</p>
|
||||||
|
|
||||||
|
<b>函数签名:</b>
|
||||||
|
|
||||||
|
```go
|
||||||
|
func Ellipsis(str string, length int) string
|
||||||
|
```
|
||||||
|
|
||||||
|
<b>示例:<span style="float:right;display:inline-block;">[Run]()</span></b>
|
||||||
|
|
||||||
|
```go
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"github.com/duke-git/lancet/v2/strutil"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
result1 := strutil.Ellipsis("hello world", 5)
|
||||||
|
result2 := strutil.Ellipsis("你好,世界!", 2)
|
||||||
|
result3 := strutil.Ellipsis("😀😃😄😁😆", 3)
|
||||||
|
|
||||||
|
fmt.Println(result1)
|
||||||
|
fmt.Println(result2)
|
||||||
|
fmt.Println(result3)
|
||||||
|
|
||||||
|
// Output:
|
||||||
|
// hello...
|
||||||
|
// 你好...
|
||||||
|
// 😀😃😄...
|
||||||
|
}
|
||||||
```
|
```
|
||||||
@@ -63,6 +63,7 @@ import (
|
|||||||
- [SubInBetween](#SubInBetween)
|
- [SubInBetween](#SubInBetween)
|
||||||
- [HammingDistance](#HammingDistance)
|
- [HammingDistance](#HammingDistance)
|
||||||
- [Concat](#Concat)
|
- [Concat](#Concat)
|
||||||
|
- [Ellipsis](#Ellipsis)
|
||||||
|
|
||||||
<div STYLE="page-break-after: always;"></div>
|
<div STYLE="page-break-after: always;"></div>
|
||||||
|
|
||||||
@@ -1100,10 +1101,10 @@ import (
|
|||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
result1 := strutil.IsNotBlank("")
|
result1 := strutil.IsNotBlank("")
|
||||||
result2 := strutil.IsNotBlank(" ")
|
result2 := strutil.IsNotBlank(" ")
|
||||||
result3 := strutil.IsNotBlank("\t\v\f\n")
|
result3 := strutil.IsNotBlank("\t\v\f\n")
|
||||||
result4 := strutil.IsNotBlank(" 中文")
|
result4 := strutil.IsNotBlank(" 中文")
|
||||||
result5 := strutil.IsNotBlank(" world ")
|
result5 := strutil.IsNotBlank(" world ")
|
||||||
|
|
||||||
fmt.Println(result1)
|
fmt.Println(result1)
|
||||||
fmt.Println(result2)
|
fmt.Println(result2)
|
||||||
@@ -1553,17 +1554,50 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
result1 := strutil.Concat(12, "Hello", " ", "World", "!")
|
||||||
|
result2 := strutil.Concat(11, "Go", " ", "Language")
|
||||||
|
result3 := strutil.Concat(0, "An apple a ", "day,", "keeps the", " doctor away")
|
||||||
|
fmt.Println(result1)
|
||||||
|
fmt.Println(result2)
|
||||||
|
fmt.Println(result3)
|
||||||
|
|
||||||
result1 := strutil.Concat(12, "Hello", " ", "World", "!")
|
// Output:
|
||||||
result2 := strutil.Concat(11, "Go", " ", "Language")
|
// Hello World!
|
||||||
result3 := strutil.Concat(0, "An apple a ", "day,", "keeps the", " doctor away")
|
// Go Language
|
||||||
fmt.Println(result1)
|
// An apple a day,keeps the doctor away
|
||||||
fmt.Println(result2)
|
}
|
||||||
fmt.Println(result3)
|
```
|
||||||
|
|
||||||
// Output:
|
### <span id="Ellipsis">Ellipsis</span>
|
||||||
// Hello World!
|
|
||||||
// Go Language
|
<p>Truncates a string to a specified length and appends an ellipsis.</p>
|
||||||
// An apple a day,keeps the doctor away
|
|
||||||
|
<b>Signature:</b>
|
||||||
|
|
||||||
|
```go
|
||||||
|
func Ellipsis(str string, length int) string
|
||||||
|
```
|
||||||
|
|
||||||
|
<b>Example:<span style="float:right;display:inline-block;">[Run]()</span></b>
|
||||||
|
|
||||||
|
```go
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"github.com/duke-git/lancet/v2/strutil"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
result1 := strutil.Ellipsis("hello world", 5)
|
||||||
|
result2 := strutil.Ellipsis("你好,世界!", 2)
|
||||||
|
result3 := strutil.Ellipsis("😀😃😄😁😆", 3)
|
||||||
|
|
||||||
|
fmt.Println(result1)
|
||||||
|
fmt.Println(result2)
|
||||||
|
fmt.Println(result3)
|
||||||
|
|
||||||
|
// Output:
|
||||||
|
// hello...
|
||||||
|
// 你好...
|
||||||
|
// 😀😃😄...
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
@@ -621,6 +621,8 @@ func HammingDistance(a, b string) (int, error) {
|
|||||||
// Concat uses the strings.Builder to concatenate the input strings.
|
// Concat uses the strings.Builder to concatenate the input strings.
|
||||||
// - `length` is the expected length of the concatenated string.
|
// - `length` is the expected length of the concatenated string.
|
||||||
// - if you are unsure about the length of the string to be concatenated, please pass 0 or a negative number.
|
// - if you are unsure about the length of the string to be concatenated, please pass 0 or a negative number.
|
||||||
|
//
|
||||||
|
// Play: todo
|
||||||
func Concat(length int, str ...string) string {
|
func Concat(length int, str ...string) string {
|
||||||
if len(str) == 0 {
|
if len(str) == 0 {
|
||||||
return ""
|
return ""
|
||||||
@@ -638,3 +640,21 @@ func Concat(length int, str ...string) string {
|
|||||||
}
|
}
|
||||||
return sb.String()
|
return sb.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ellipsis truncates a string to a specified length and appends an ellipsis.
|
||||||
|
// Play: todo
|
||||||
|
func Ellipsis(str string, length int) string {
|
||||||
|
str = strings.TrimSpace(str)
|
||||||
|
|
||||||
|
if length <= 0 {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
runes := []rune(str)
|
||||||
|
|
||||||
|
if len(runes) <= length {
|
||||||
|
return str
|
||||||
|
}
|
||||||
|
|
||||||
|
return string(runes[:length]) + "..."
|
||||||
|
}
|
||||||
|
|||||||
@@ -694,3 +694,18 @@ func ExampleConcat() {
|
|||||||
// Go Language
|
// Go Language
|
||||||
// An apple a day,keeps the doctor away
|
// An apple a day,keeps the doctor away
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ExampleEllipsis() {
|
||||||
|
result1 := Ellipsis("hello world", 5)
|
||||||
|
result2 := Ellipsis("你好,世界!", 2)
|
||||||
|
result3 := Ellipsis("😀😃😄😁😆", 3)
|
||||||
|
|
||||||
|
fmt.Println(result1)
|
||||||
|
fmt.Println(result2)
|
||||||
|
fmt.Println(result3)
|
||||||
|
|
||||||
|
// Output:
|
||||||
|
// hello...
|
||||||
|
// 你好...
|
||||||
|
// 😀😃😄...
|
||||||
|
}
|
||||||
|
|||||||
@@ -620,3 +620,27 @@ func TestConcat(t *testing.T) {
|
|||||||
assert.Equal("你好,世界!", Concat(0, "你好", ",", "", "世界!", ""))
|
assert.Equal("你好,世界!", Concat(0, "你好", ",", "", "世界!", ""))
|
||||||
assert.Equal("Hello World!", Concat(0, "Hello", " Wo", "r", "ld!", ""))
|
assert.Equal("Hello World!", Concat(0, "Hello", " Wo", "r", "ld!", ""))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestEllipsis(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
assert := internal.NewAssert(t, "TestEllipsis")
|
||||||
|
|
||||||
|
tests := []struct {
|
||||||
|
input string
|
||||||
|
length int
|
||||||
|
want string
|
||||||
|
}{
|
||||||
|
{"", 0, ""},
|
||||||
|
{"hello world", 0, ""},
|
||||||
|
{"hello world", -1, ""},
|
||||||
|
{"hello world", 5, "hello..."},
|
||||||
|
{"hello world", 11, "hello world"},
|
||||||
|
{"你好,世界!", 2, "你好..."},
|
||||||
|
{"😀😃😄😁😆", 3, "😀😃😄..."},
|
||||||
|
{"This is a test.", 10, "This is a ..."},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
assert.Equal(tt.want, Ellipsis(tt.input, tt.length))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user