• Go语言开发中 经常遇到的字符串处理 的一些简单小技巧


    Go语言开发中 经常遇到的字符串处理 的一些简单小技巧

    Go语言圈 2022-10-18 08:30 发表于广东
    学习与交流:Go语言技术微信群

    商务合作加微信:LetsFeng

    goland 全家桶激活码,支持所有版本,支持所有系统

    链接:http://web.52shizhan.cn/activity/s2abxc

    提取码:GJF9B1DK

    现在就开始你的Go语言学习之旅吧!人生苦短,let’s Go.



    
    
    
    

    一、如何修改字符串中的一个字符?

    str:="hello"
    // 将字符串转成字节数组
    c:=[]byte(str)
    // 将字节数组第一个数转成 'c'
    c[0]='c'
    s2:= string(c)

    二、如何获取字符串的子串?

    str:="hello"
    // 获取 n 到 m-1 内元素 [n,m)
    substr := str[n:m]
    // 获取 第一个元素 [1,2)
    substr := str[1:2]

    三、使用for或者for-range遍历字符串?

    代码如下(示例):

    str:="hello"
    for i:=0; i < len(str); i++ {
        v := str[i]
        fmt.Println(v)
    }

    for _, v := range str {
        fmt.Println(v)
    }

    结果都将是ASCII码值

    图片

     

    四、如何获取一个字符串的长度?

    1. 字节数?

    v := len(str)

    2.字符数?

    //较快
    v1 := utf8.RuneCountInString(str)

    v2 := len([]rune(str))

     

    五、如何更好的连接字符串?

    1. 两个字符串?

    str1 := "hello"
    str2 := "world"
    v := str1 + "_" + str2

    2.字符串数组或切片?

    strArr := []string{
        "hello", "world",
    }

    v1 := strings.Join(strArr, "_")
    fmt.Println(v1)

     

    自动填充字符串,补齐位数

    // StrPad
    // input string 原字符串
    // padLength int 规定补齐后的字符串位数
    // padString string 自定义填充字符串
    // padType string 填充类型:LEFT(向左填充,自动补齐位数), 默认右侧
    func StrPad(input string, padLength int, padString string, padType string) string {

        output := ""
        inputLen := len(input)

        if inputLen >= padLength {
            return input
        }

        padStringLen := len(padString)
        needFillLen := padLength - inputLen

        if diffLen := padStringLen - needFillLen; diffLen > 0 {
            padString = padString[diffLen:]
        }

        for i := 1; i <= needFillLen; i += padStringLen {
            output += padString
        }
        switch padType {
        case "LEFT":
            return output + input
        default:
            return input + output
        }
    }

    用法:

    func main() {
        leftString := StrPad("84792", 10, "0000000000000000000000000", "LEFT")
        rightString := StrPad("1", 5, "0000000000000000", "RIGHT")
        fmt.Println(fmt.Sprintf("%s-%s", leftString, rightString)) //0000084792-10000
    }

    前置/后置补零

    package main

    import (
        "fmt"
    )

    func main()  {
        res:=ZeroFillByStr("12",3,true)
        fmt.Println(res)
    }
    //
    //  ZeroFillByStr
    //  @Description: 字符串补零
    //  @param str :需要操作的字符串
    //  @param resultLen 结果字符串的长度
    //  @param reverse true 为前置补零,false 为后置补零
    //  @return string
    //
    func ZeroFillByStr(str string,resultLen int, reverse bool) string  {
        if len(str)>resultLen||resultLen<=0{
            return str
        }
        if reverse{
            return fmt.Sprintf("%0*s", resultLen, str)//不足前置补零
        }
        result := str
        for i:=0;i<resultLen-len(str);i++{
            result+="0"
        }
        return result

    }

    结果:

    1 <nil> 012

    文章首发:https://blog.csdn.net/moer0/article/details/123240159

     

    更多相关Go语言的技术文章或视频教程,请关注本公众号获取并查看,感谢你的支持与信任

  • 相关阅读:
    BZOJ1316——树上的询问(点分治)
    BZOJ2152——聪聪可可(点分治)
    POJ1741(点分治)
    POJ2104——K-th Number (主席树模板)
    USACO Training Section 5.1 Fencing the Cows 圈奶牛(凸包)
    POJ1269(直线之间的关系)
    NOIP2016——换教室(floyd+期望dp)
    POJ2187(旋转卡壳)
    POJ3348——Cows(求凸包)
    ZOJ1081(射线法判断点是否在多边形内部)
  • 原文地址:https://www.cnblogs.com/cheyunhua/p/16802401.html
Copyright © 2020-2023  润新知