1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- // Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
- //
- // This Source Code Form is subject to the terms of the MIT License.
- // If a copy of the MIT was not distributed with this file,
- // You can obtain one at https://github.com/gogf/gf.
- package gstr
- // SubStr returns a portion of string `str` specified by the `start` and `length` parameters.
- // The parameter `length` is optional, it uses the length of `str` in default.
- func SubStr(str string, start int, length ...int) (substr string) {
- strLength := len(str)
- // Simple border checks.
- if start < 0 {
- start = 0
- }
- if start >= strLength {
- start = strLength
- }
- end := strLength
- if len(length) > 0 {
- end = start + length[0]
- if end < start {
- end = strLength
- }
- }
- if end > strLength {
- end = strLength
- }
- return str[start:end]
- }
- // SubStrRune returns a portion of string `str` specified by the `start` and `length` parameters.
- // SubStrRune considers parameter `str` as unicode string.
- // The parameter `length` is optional, it uses the length of `str` in default.
- func SubStrRune(str string, start int, length ...int) (substr string) {
- // Converting to []rune to support unicode.
- var (
- runes = []rune(str)
- runesLength = len(runes)
- )
- // Simple border checks.
- if start < 0 {
- start = 0
- }
- if start >= runesLength {
- start = runesLength
- }
- end := runesLength
- if len(length) > 0 {
- end = start + length[0]
- if end < start {
- end = runesLength
- }
- }
- if end > runesLength {
- end = runesLength
- }
- return string(runes[start:end])
- }
- // StrLimit returns a portion of string `str` specified by `length` parameters, if the length
- // of `str` is greater than `length`, then the `suffix` will be appended to the result string.
- func StrLimit(str string, length int, suffix ...string) string {
- if len(str) < length {
- return str
- }
- suffixStr := defaultSuffixForStrLimit
- if len(suffix) > 0 {
- suffixStr = suffix[0]
- }
- return str[0:length] + suffixStr
- }
- // StrLimitRune returns a portion of string `str` specified by `length` parameters, if the length
- // of `str` is greater than `length`, then the `suffix` will be appended to the result string.
- // StrLimitRune considers parameter `str` as unicode string.
- func StrLimitRune(str string, length int, suffix ...string) string {
- runes := []rune(str)
- if len(runes) < length {
- return str
- }
- suffixStr := defaultSuffixForStrLimit
- if len(suffix) > 0 {
- suffixStr = suffix[0]
- }
- return string(runes[0:length]) + suffixStr
- }
|