Golang 学习十四(字符串处理)

26 篇文章 0 订阅
25 篇文章 4 订阅
本文介绍了字符串在Go语言中的处理方法,包括字节数组转换、头尾处理、位置索引、替换、统计次数、重复、大小写转换、去除字符、切片处理和数值转换。示例代码详细展示了各种操作的实现,对于理解和操作字符串非常有帮助。
摘要由CSDN通过智能技术生成


1. 字节数组

字符是人的语言(文本:字符串),字节是机器的语言(图片,音频,视频 …),它们之间通过 ASCII 码互相翻译,一个英文字符等于一个字节,一个中文字符等于二个字节(UTF-8)。

package main

import "fmt"

func main() {
    var (
        str1 = "hello"
        str2 = "world" 
    )
    str3 := str1 + " " + str2
    fmt.Printf("数据 %s 长度 %d\n",str3,len(str3))
    fmt.Printf("数据 %s 类型 %T\n",str3)
    fmt.Println()
    
    // 字符串转换成字节数组
    tmp := []byte(str3)
    fmt.Printf("数据 %s 长度 %d\n",tmp,len(tmp))
    fmt.Printf("数据 %s 类型 %T\n",tmp)
    for i:=0;i<len(tmp);i++ {
        fmt.Println(tmp[i])
    }
    
    // 字节数转组字符串
    fmt.Println("字节数组转字符串:",string(tmp))
    fmt.Println()
    
    // 反转函数调用
    fmt.Println("反转:",Reverse(str3))
}

// 反转
func Reverse(str string) string {
    var (
        result string
        leng int = len(str)
    )
    for i := leng - 1; i >= 0; i-- {
        // Sprintf 转换数据类型为 string,使用 + 进行拼接
        // 重点:Sprintf 将任意类型转换成字符串
        result = result + fmt.Sprintf("%c", str[i])
    }
    return result
}

// for i:=0;i<leng;i++ {
//    result = result + fmt.Sprintf("%c",str[leng-i-1])
// }

// 结果
数据 hello world 长度 11
数据 hello world 类型 %!T(MISSING)

数据 hello world 长度 11
数据 hello world 类型 %!T(MISSING)
104
101
108
108
111
32
119
111
114
108
100
字节数组转字符串: hello world

反转: dlrow olleh

2. 头尾处理

示例:

  • 判断字符串 s 是否以 prefix 开头,判断 URL 是否以 http:// 开头,如果不是,则加上 http://

  • 判断字符串 s 是否以 suffix 结尾,判断路径是否以 / 结尾,如果不是,则加上 / 结尾。

package main

import (
    "fmt"
    "strings"
)

func main() {
    var (
        url string
        path string
    )
    fmt.Scanf("%s%s",&url,&path)	// 空格输入第二个参数
    fmt.Println(urlProcess(url))
    fmt.Println(pathProcess(path))
}

// 头部是否包含 http://,不包含添加
func urlProcess(url string) string {
    // 返回的 result 类型是 bool
    result := strings.HasPrefix(url,"http://")
    if !result {
        url = fmt.Sprintf("http://%s",url)
    }
    return url
}

// 尾部是否包含 /,不包含添加
func pathProcess(path string) string {
    // 返回的 result 类型是 bool
    result := strings.HasSuffix(path,"/")
    if !result {
        path = fmt.Sprintf("%s/",path)
    }
    return path
}

// 结果
www.baidu.com /root/bin
http://www.baidu.com
/root/bin/

3. 位置索引

示例:判断子字符串在字符串中首次出现的位置和最后出现的位置。

package main

import (
    "fmt"
    "strings"
)

func main() {
    var (
        s string = "adadascdadasacdsda"
        str string = "cd"
    )
    
    start := strings.Index(s,str)
    fmt.Println("关键词首部出现的位置:",start)
    end := strings.LastIndex(s,str)
    fmt.Println("关键词尾部部出现的位置:",end)
}
关键词首部出现的位置: 6
关键词尾部部出现的位置: 13

4. 替换

package main

import (
    "fmt"
    "strings"
)

func main() {
    var (
        s string = "adadascdadasacdsda"
        str string = "cd"
    )
    
    // 替换 Replace(原字符串,原字段,新字段,替换次数)
    // -1 表示全文替换,0 表示不替换
    result := strings.Replace(s,str,"CD",-1)
    fmt.Println(result)
}
adadasCDadasaCDsda

5. 统计次数

package main

import (
    "fmt"
    "strings"
)

func main() {
    var (
        s string = "adadascdadasacdsda"
        str string = "cd"
    )
    
    // 使用 count 统计关键字在字符串中出现的次数
    count := strings.Count(s,str)
    fmt.Println("cd 出现的次数:",count)
}    
cd 出现的次数: 2

6. 重复

package main

import (
    "fmt"
    "strings"
)

func main() {
    var (
        str string = "cd"
    )
    // 复制关键字段 3 次并返回完整字符串
    result := strings.Repeat(str,3)
    fmt.Println(result)
}    
cdcdcd

7. 大小写

package main

import (
    "fmt"
    "strings"
)

func main() {
    var (
        str string = "abc"
    )
    
    // 字符串变大写
    result1 := strings.ToUpper(str)
    fmt.Println(result1)
    
    // 字符串变小写
    result2 := strings.ToLower(result1)
    fmt.Println(result2)
}    
ABC
abc

8. 去除字符

去除首尾空白字符

package main

import (
    "fmt"
    "strings"
)

func main() {
    var (
        str string = "  abc "
    )
    fmt.Println("原长度:",len(str))
    // 去除首尾空白字符
    result := strings.TrimSpace(str)
    fmt.Println(result)
    fmt.Println("现长度:",len(result))
}    
原长度: 6
abc
现长度: 3

去除首尾和指定位置字符

package main

import (
    "fmt"
    "strings"
)

func main() {
    var (
        str string = "this is abc web"
    )
    fmt.Println("原长度:",len(str))
    /* 去除首尾空白字符
    result := strings.TrimSpace(str)
    fmt.Println(result)
    fmt.Println("现长度:",len(result))
    */
    
    // 去除首尾匹配关键字
    result1 := strings.Trim(str,"this")
    fmt.Println(result1)
    fmt.Println("现长度:",len(result1))
}   
原长度: 15
 is abc web
现长度: 11

TrimLeft/TrimRight

  • TrimLeft 从左匹配关键字符,进行删除,直到没有匹配上的字符为止,即使后面有匹配字符也不会被删除。
  • TrimRight 从右匹配关键字符,进行删除,直到没有匹配上的字符为止,即使后面有匹配字符也不会被删除。
package main

import (
    "fmt"
    "strings"
)

func main() {
    var (
        str string = "this is abc web"
    )
    //T
    result3 := strings.TrimLeft(str,"thisa ")
    fmt.Println(result3)
    result4 := strings.TrimRight(str,"_isweb ")
    fmt.Println(result4)
} 
bc web
this is abc

9. 切片处理

字符串以空格分割转换成切片。

package main

import (
    "fmt"
    "strings"
)

func main() {
    var s string = "abc def hig"
    // 转换切片,默认识别空格分隔
    result := strings.Fields(s)
    fmt.Printf("数据类型 %T\n内容是 %v\n",result,result)
    for i:=0;i<len(result);i++ {
        fmt.Println(result[i])
    }
}
数据类型 []string
内容是 [abc def hig]
abc
def
hig

Split 识别其他特殊符号分割

package main

import (
    "fmt"
    "strings"
)

func main() {
    var s string = "abc:def:hig"
    // 转换切片,默认识别空格分隔
    result1 := strings.Split(s,":")
    fmt.Printf("数据类型 %T\n内容是 %v\n",result1,result1)
}    
数据类型 []string
内容是 [abc def hig]

切片转换成字符串

package main

import (
    "fmt"
    "strings"
)

func main() {
    var s string = "abc def hig"
    result1 := strings.Split(s," ")
    fmt.Printf("数据类型 %T\n内容是 %v\n",result1,result1)
    
    // 
    str := strings.Join(result1,",")
    fmt.Printf("数据类型 %T\n内容是 %v\n",str,str)
}    
数据类型 []string
内容是 [abc def hig]
数据类型 string
内容是 abc,def,hig

10. 数值处理

  • 数值转换成字符串。

方法一

package main

import (
    "fmt"
    "strconv"
)

func main() {
    var num int = 123456
    fmt.Printf("num 数据类型 %T\n",num)
    // 数值转换成字符串
    result := strconv.Itoa(num)
    fmt.Printf("result 数据类型 %T\n",result)
    fmt.Println(result)
}

// 结果
num 数据类型 int
result 数据类型 string
123456

方法二

// 使用 sprintf 函数处理
package main

import (
    "fmt"
)

func main() {
    var num int = 123456
    fmt.Printf("num 数据类型 %T\n",num)
    // 使用 Sprintf() 转换字符串,可以实现多类型转化
    result := fmt.Sprintf("%d",num)
    fmt.Printf("result 数据类型 %T\n",result)
}

// 结果
num 数据类型 int
result 数据类型 string
  • 字符串转换成数值。
package main

import (
    "fmt"
    "strconv"
)

func main() {
    var str string = "123456"
    // 字符串转整数
    result, err := strconv.Atoi(str)
    if err == nil {
        fmt.Printf("数据类型 %T\n",result)
    } else {
        fmt.Println(err)
    }
}

// 结果
数据类型 int

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Golang(又称Go)是一种静态类型,编译型,开源的编程语言,它以简洁、高效、并发和可靠著称。学习Golang主要包括以下几个步骤。 1. 学习基本语法:首先,要理解Golang的基本语法,包括变量、函数、数据类型、运算符、流程控制等。可以通过在线教程、书籍或官方文档来学习。 2. 熟悉标准库:Golang提供了丰富的标准库,包括各种常用功能,如字符串处理、文件操作、网络编程等。熟悉标准库可以帮助我们更快地编写高效的代码。 3. 学习并发编程:Golang天生支持并发编程,通过goroutine和channel可以实现高效的并发操作。学习并发编程可以帮助解决高并发场景下的问题,提升程序性能。 4. 掌握常用框架和工具:Golang有许多优秀的框架和工具,如Gin、Beego、Echo等。这些框架和工具可以帮助提高开发效率,快速搭建应用。 5. 实践项目:通过实践项目来巩固所学知识,可以选择一些小型的项目开始,逐渐挑战更复杂的项目。通过实践不断提升编程技能和解决问题的能力。 6. 加强算法和数据结构的学习:算法和数据结构是编程的基础,深入学习并理解常见的算法和数据结构是提升编程能力的重要一步。 总结起来,学习Golang的顺序应该是先学习基本语法,然后掌握标准库,学习并发编程,掌握常用框架和工具,实践项目,最后加强算法和数据结构的学习。此外,持续积累编程经验和不断学习新技术也是非常重要的。 ### 回答2: 学习Golang的顺序可以分为四个主要步骤。 1. 学习基本语法和数据类型 首先,要学习Golang的基本语法和数据类型。了解如何声明变量、使用条件语句、循环和函数等基本概念。掌握Golang中的数据类型包括整数、浮点数、字符、字符串、数组、切片、映射、结构体等。理解它们的特点和用法是学习Golang的基础。 2. 掌握面向对象编程 Golang支持面向对象编程,要学习如何使用结构体和方法定义和组织代码。学习如何创建结构体类型和使用方法来处理结构体实例。了解封装、继承和多态的概念,并学会如何在Golang中实现它们。 3. 学习并发编程 Golang是为并发编程而生的语言学习并发编程是使用Golang的重要一步。了解Golang的并发原语,例如goroutine和通道。掌握如何创建和管理goroutine,并学会使用通道进行不同goroutine之间的通信和同步。理解并发编程的基本概念和常见问题,例如竞态条件和死锁,并学习如何解决它们。 4. 深入学习标准库和其它常用包 最后,要深入学习Golang的标准库和其它常用包。Golang拥有丰富的标准库,涵盖了许多领域,包括网络编程、文件处理、数据库操作等。学习如何使用标准库中提供的功能来解决实际问题。此外,还可以学习一些常用的第三方库,以扩展Golang的功能和效率。 总结起来,学习Golang的顺序是:基本语法和数据类型 -> 面向对象编程 -> 并发编程 -> 标准库和其它常用包。通过有序的学习,可以逐步掌握Golang的核心概念和技术,为实际项目的开发做好准备。 ### 回答3: 学习Golang的顺序可以分为以下几个步骤: 1. 学习基本语法:首先要了解Golang的基本语法规则,包括变量、常量、数据类型、函数、控制流等。可以通过阅读官方文档、在线教程或者参考书籍来学习。 2. 理解并发编程:Golang是以并发为核心设计的编程语言,支持轻量级的线程(Goroutine)和通信(Channel)机制。学习并发编程的原理和技巧,包括Goroutine的创建和调度、Channel的使用、互斥锁和条件变量等。 3. 掌握标准库:Golang提供了丰富的标准库,涵盖了文件处理、网络编程、数据解析、加密解密等各个方面。学习并熟悉标准库的使用,可以提高开发效率和代码质量。 4. 学习常用框架和工具:Golang有许多优秀的第三方框架和工具可供使用,如Web开发框架Gin、数据库ORM框架GORM、测试框架Testify等。选择合适的框架和工具,可以提高开发效率和性能。 5. 实践项目:通过实际项目的练习,将所学知识应用到实际中,加深理解和巩固技能。可以选择一些简单但实用的项目,逐渐挑战更复杂的需求。 6. 阅读优秀的开源代码:阅读和理解一些优秀的开源项目代码,可以提高自己的编程水平和技术见识。可以选择一些知名的开源项目,如Docker、Kubernetes等。 总之,学习Golang需要循序渐进,从基础语法开始,逐步深入学习并发编程、标准库、框架和工具的使用,同时注重实践项目和阅读开源代码。通过不断学习和练习,可以掌握Golang的使用技巧,提升自己的编程能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值