mbstring

package
v0.4.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 12, 2023 License: MIT Imports: 5 Imported by: 0

Documentation

Overview

Additional functions for processing strings in multi-byte sequence.

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func At

func At(str string, i int) string

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

func Chunk(str string, length int) []string

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

func Index(str string, sub string) int

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

func LastIndex(str string, sub string) int

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

func Length(str string) int

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

func PadEnd(str string, finalLength int, padStr string) string

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

func PadStart(str string, finalLength int, padStr string) string

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(str string, pattern string) int

Executes a search for a match between a regular expression and the string, returning the index of the first match in the string.

func Slice

func Slice(str string, start int, end int) string

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

func Substring(str string, start int, end int) string

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

func Truncate(str string, length int) string

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.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL