Documentation
¶
Overview ¶
Additional functions for processing strings in multi-byte sequence.
Index ¶
- func At(str string, i int) string
- func Chunk(str string, length int) []string
- func Index(str string, sub string) int
- func LastIndex(str string, sub string) int
- func Length(str string) int
- func PadEnd(str string, finalLength int, padStr string) string
- func PadStart(str string, finalLength int, padStr string) string
- func Search(str string, pattern string) int
- func Slice(str string, start int, end int) string
- func Substring(str string, start int, end int) string
- func Truncate(str string, length int) string
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func At ¶
Returns the character from the string according to the given index.
If `i < 0`, it returns the character counting from the end of the string.
If the given index doesn't contain a value (boundary exceeded), an empty string will be returned.
Example ¶
package main
import (
"fmt"
"github.com/ayonli/goext/stringx/mbstring"
)
func main() {
str1 := "Hello, World!"
str2 := "你好,世界!"
str3 := "Hello, 世界!"
char1 := mbstring.At(str1, 7)
char2 := mbstring.At(str2, 3)
char3 := mbstring.At(str3, 7)
char4 := mbstring.At(str3, 10)
char5 := mbstring.At("", 0) // an empty string always returns an empty string
fmt.Println(char1)
fmt.Println(char2)
fmt.Println(char3)
fmt.Printf("%#v\n", char4)
fmt.Printf("%#v\n", char5)
}
Output: W 世 世 "" ""
func Chunk ¶
Breaks the string into smaller chunks according to the given length.
Example ¶
package main
import (
"fmt"
"github.com/ayonli/goext/stringx/mbstring"
)
func main() {
str1 := "foobar"
str2 := "你好世界"
chunks1 := mbstring.Chunk(str1, 2)
chunks2 := mbstring.Chunk(str1, 4)
chunks3 := mbstring.Chunk(str2, 2)
chunks4 := mbstring.Chunk(str2, 3)
fmt.Println(chunks1)
fmt.Println(chunks2)
fmt.Println(chunks3)
fmt.Println(chunks4)
}
Output: [fo ob ar] [foob ar] [你好 世界] [你好世 界]
func Index ¶
Returns the index at which a given sub string can be found in the string, or -1 if it is not present.
Example ¶
package main
import (
"fmt"
"github.com/ayonli/goext/stringx/mbstring"
)
func main() {
str1 := "Hello, World!"
str2 := "你好,世界!"
str3 := "Hello, 世界!"
idx1 := mbstring.Index(str1, "World")
idx2 := mbstring.Index(str2, "世界")
idx3 := mbstring.Index(str3, "世界")
idx4 := mbstring.Index(str3, "你好")
idx5 := mbstring.Index("", "")
idx6 := mbstring.Index("", "你好")
fmt.Println(idx1)
fmt.Println(idx2)
fmt.Println(idx3)
fmt.Println(idx4)
fmt.Println(idx5)
fmt.Println(idx6)
}
Output: 7 3 7 -1 0 -1
func LastIndex ¶
Returns the last index at which a given sub string can be found in the string, or -1 if it is not present. The string is searched backwards.
Example ¶
package main
import (
"fmt"
"github.com/ayonli/goext/stringx/mbstring"
)
func main() {
str1 := "Hello, World!"
str2 := "你好,世界!Hi, 世界"
str3 := "Hello, 世界!Hi, 世界"
idx1 := mbstring.LastIndex(str1, "o")
idx2 := mbstring.LastIndex(str2, "世界")
idx3 := mbstring.LastIndex(str3, "H")
idx4 := mbstring.LastIndex(str3, "你好")
idx5 := mbstring.LastIndex("", "")
idx6 := mbstring.LastIndex("", "你好")
fmt.Println(idx1)
fmt.Println(idx2)
fmt.Println(idx3)
fmt.Println(idx4)
fmt.Println(idx5)
fmt.Println(idx6)
}
Output: 8 10 10 -1 0 -1
func Length ¶
Returns the number of the characters in the string.
Example ¶
package main
import (
"fmt"
"github.com/ayonli/goext/stringx/mbstring"
)
func main() {
str1 := "Hello, World!"
str2 := "你好,世界!"
str3 := "Hello, 世界!"
len1 := mbstring.Length(str1)
len2 := mbstring.Length(str2)
len3 := mbstring.Length(str3)
fmt.Println(len1)
fmt.Println(len2)
fmt.Println(len3)
}
Output: 13 6 10
func PadEnd ¶
Pads the given string with another string (multiple times, if needed) until the resulting string reaches the final length. The padding is applied from the end of the string.
Example ¶
package main
import (
"fmt"
"github.com/ayonli/goext/stringx/mbstring"
)
func main() {
str1 := "你好,世界!"
str2 := mbstring.PadEnd(str1, 8, " ")
str3 := mbstring.PadEnd(str1, 8, "*")
str4 := mbstring.PadEnd(str1, 8, "Hi")
str5 := mbstring.PadEnd(str1, 8, "Hola")
str6 := mbstring.PadEnd(str1, 5, "**")
str7 := mbstring.PadEnd(str1, 12, "Hola")
fmt.Printf("%#v\n", str2)
fmt.Println(str3)
fmt.Println(str4)
fmt.Println(str5)
fmt.Println(str6)
fmt.Println(str7)
}
Output: "你好,世界! " 你好,世界!** 你好,世界!Hi 你好,世界!Ho 你好,世界! 你好,世界!HolaHo
func PadStart ¶
Pads the given string with another string (multiple times, if needed) until the resulting string reaches the final length. The padding is applied from the start of the string.
Example ¶
package main
import (
"fmt"
"github.com/ayonli/goext/stringx/mbstring"
)
func main() {
str1 := "你好,世界!"
str2 := mbstring.PadStart(str1, 8, " ")
str3 := mbstring.PadStart(str1, 8, "*")
str4 := mbstring.PadStart(str1, 8, "Hi")
str5 := mbstring.PadStart(str1, 8, "Hola")
str6 := mbstring.PadStart(str1, 5, "**")
str7 := mbstring.PadStart(str1, 12, "Hola")
fmt.Printf("%#v\n", str2)
fmt.Println(str3)
fmt.Println(str4)
fmt.Println(str5)
fmt.Println(str6)
fmt.Println(str7)
}
Output: " 你好,世界!" **你好,世界! Hi你好,世界! Ho你好,世界! 你好,世界! HolaHo你好,世界!
func Search ¶
Executes a search for a match between a regular expression and the string, returning the index of the first match in the string.
Example ¶
package main
import (
"fmt"
"github.com/ayonli/goext/stringx/mbstring"
)
func main() {
str := "你好,世界!"
idx1 := mbstring.Search(str, ",\\S+")
idx2 := mbstring.Search(str, ",\\s+")
fmt.Println(idx1)
fmt.Println(idx2)
}
Output: 2 -1
func Slice ¶
Returns a section of the string selected from `start` to `end` (excluded).
If `start < 0`, it will be calculated as `Length(str) + start`.
If `end < 0`, it will be calculated as `Length(str) + end`.
Example ¶
package main
import (
"fmt"
"github.com/ayonli/goext/stringx/mbstring"
)
func main() {
str1 := "Hello, World!"
str2 := "你好,世界!"
str3 := "Hello, 世界!"
str4 := mbstring.Slice(str1, 0, 5)
str5 := mbstring.Slice(str2, 3, -1)
str6 := mbstring.Slice(str3, -3, -1)
str7 := mbstring.Slice(str3, -3, -5)
str8 := mbstring.Slice(str3, 5, 3)
fmt.Println(str4)
fmt.Println(str5)
fmt.Println(str6)
fmt.Printf("%#v\n", str7)
fmt.Printf("%#v\n", str8)
}
Output: Hello 世界 世界 "" ""
func Substring ¶
Returns a section of the string selected from `start` to `end` (excluded).
This function is similar to the `Slice()`, except it doesn't accept negative positions.
Example ¶
package main
import (
"fmt"
"github.com/ayonli/goext/stringx/mbstring"
)
func main() {
str1 := "Hello, World!"
str2 := "你好,世界!"
str3 := mbstring.Substring(str1, 0, 5)
str4 := mbstring.Substring(str2, 5, 3)
str5 := mbstring.Substring(str2, 3, 20)
str6 := mbstring.Substring(str2, -1, 5) // negative index will be reset to 0
str7 := mbstring.Substring(str2, 7, -1)
fmt.Println(str3)
fmt.Printf("%#v\n", str4)
fmt.Println(str5)
fmt.Println(str6)
fmt.Printf("%#v\n", str7)
}
Output: Hello "" 世界! 你好,世界 ""
func Truncate ¶
Truncates the given string to the given length (including the ending `...`).
Example ¶
package main
import (
"fmt"
"github.com/ayonli/goext/stringx/mbstring"
)
func main() {
str1 := "Hello, World!"
str2 := mbstring.Truncate(str1, 15)
str3 := mbstring.Truncate(str1, 12)
str4 := mbstring.Truncate(str1, 10)
str5 := mbstring.Truncate(str1, -1) // 0 or negative length return an empty string
str6 := "你好,世界!Hallo 世界!"
str7 := mbstring.Truncate(str6, 15)
str8 := mbstring.Truncate(str6, 12)
str9 := mbstring.Truncate(str6, 10)
str10 := mbstring.Truncate(str6, -1)
fmt.Println(str2)
fmt.Println(str3)
fmt.Println(str4)
fmt.Printf("%#v\n", str5)
fmt.Println(str7)
fmt.Println(str8)
fmt.Println(str9)
fmt.Printf("%#v\n", str10)
}
Output: Hello, World! Hello, Wo... Hello, ... "" 你好,世界!Hallo 世界! 你好,世界!Hal... 你好,世界!H... ""
Types ¶
This section is empty.