Go语言实现截取指定长度字符串:高效且灵活的Substr函数

本文将介绍Go语言实现的Substr函数,用于截取指定长度的字符串,支持正向和反向截取。该函数高效且灵活,并提供了使用示例,方便读者理解和应用。

func Substr(str string, start, length int) string {
    rs := []rune(str)
    lenrs := len(rs)
    end := 0
    if start < 0 {
        start = lenrs + start
    }
    end = start + length
    if start > end {
        start, end = end, start
    }
    if end > lenrs {
        end = lenrs
    }
    if start > lenrs {
        start = lenrs
    }
    return string(rs[start:end])
}

// 使用示例
str := 'Hello, 世界!'
substr := Substr(str, 0, 5) // 截取前5个字符
fmt.Println(substr) // 输出:Hello

substr = Substr(str, 7, 2) // 截取第8个字符和第9个字符
fmt.Println(substr) // 输出:世界

substr = Substr(str, -2, 2) // 截取倒数第2个字符和倒数第1个字符
fmt.Println(substr) // 输出:!

函数解析:

  1. Substr(str string, start, length int) string:该函数接受三个参数:
    • str:要截取的字符串。
    • start:截取起始位置,支持负数(表示从字符串末尾开始计算)。
    • length:截取长度。
  2. rs := []rune(str):将字符串转换为rune切片,以便正确处理中文等多字节字符。
  3. lenrs := len(rs):获取rune切片的长度。
  4. end := 0:初始化截取结束位置。
  5. if start < 0 {...}:如果起始位置为负数,则将其转换为从字符串末尾开始计算的正数位置。
  6. end = start + length:计算截取结束位置。
  7. if start > end {...}:如果起始位置大于结束位置,则交换它们,以确保截取范围合法。
  8. if end > lenrs {...}if start > lenrs {...}:确保截取范围不超过字符串长度。
  9. return string(rs[start:end]):返回截取后的字符串。

使用示例:

  • substr := Substr(str, 0, 5):截取前5个字符,输出 'Hello'
  • substr = Substr(str, 7, 2):截取第8个字符和第9个字符,输出 '世界'
  • substr = Substr(str, -2, 2):截取倒数第2个字符和倒数第1个字符,输出 '!'

总结:

该Substr函数通过使用rune切片和灵活的边界处理,可以高效地截取指定长度的字符串,并且支持正向和反向截取。该函数在各种字符串处理场景中都非常实用。

Go语言实现截取指定长度字符串:高效且灵活的Substr函数

原文地址: https://www.cveoy.top/t/topic/nPXm 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录