Go字符串类型

news2024/9/28 13:06:34

一、字符串

1、字符串
  • Go 语言里的字符串的内部实现使用 UTF-8 编码
  • 字符串带的值为双引号(")中的内容,可以在 Go 语言的源码中直接添加非ASCII 码字符
s1 := "hello"
s2 := "您好"
2、字符串转义符
  • Go 语言的字符串常见转义符包含回车、换行、单双引号、制表符等

package main

import (
    "fmt"
)

func main() {
    fmt.PrintIn("str := \"c:\\Code\\demo\\go.exe\"") // str := "c:\Code\demo\go.exe"
}
3、多行字符串
  • 反引号间换行将被作为字符串中的换行,但是所有的转义字符均无效,文本将会原样输出
package main
import (
	"fmt"
)
func main() {
	s1 := `
	第一行
	第二行
	第三行`
	fmt.Println(s1)
}
4、byte 和 rune
  • Go 语言的字符有以下两种

uint8 类型,或者叫 byte 型:代表了 ASCII 码的一个字符

rune 类型:代表一个 UTF-8 字符

  • 字符串底层是一个 byte 数组,所以可以和[]byte 类型相互转换
  • 字符串是不能修改的 字符串是由 byte 字节组成 所以字符串的长度是 byte 字节的长度
  • rune 类型用来表示 utf8 字符,一个 rune 字符由一个或多个 byte 组成
package main

import "fmt"

func main(){
    //"比赛第一"
    s := "比赛第一"
    s_rune := []rune(s)
    fmt.PrintIn("友谊"+string(s_rune[2:]))    //友谊第一
}

二、字符串常用操作

方法介绍
len(str)求长度
+或 fmt.Sprintf拼接字符串
strings.Split分割
strings.Contains判断是否包含
strings.HasPrefix,strings.HasSuffix前缀/后缀判断
strings.Index(),strings.LastIndex()子串出现的位置
strings.Join(a[]string,sep string)join 操作
1、len(str)
package main

import "fmt"

func main(){
    var str = "this is str"
    fmt.PrintIn(len(str)) //11
}
2、+(拼接)
package main

import "fmt"

func main() {
    var str1 = "您好"
    var str2 = "golang"
    fmt.PrintIn(str1 + str2)    //你好golang
}
3、strings.Split()
package main

import (
    "fmt"
    "strings"
)

func main () {
    var s = "Running-Snail"
    var s1 = strings.Split(s,"-")
    fmt.PrintIn(s1) // [Running Snail]
}
4、strings.HasPrefix()
  • 首字符尾字母包含指定字符
package main

import (
    "fmt"
    "strings"
)

func main() {
    //1.判断字符串 以 this 开头
    var str = "this is golang"
    var flag = strings.Hasprefix(str,"this")
    fmt.PrintIn(flag)    //true

    //2.判断字符串以 go 结尾
    var.flag2 = strings.HasSuffix(str,"go")
    fmt.PrintIn(flag2)    //false
}
5、strings.Index()
  • 判断字符串出现的位置
package main

import (
    "fmt"
    "strings"
)

func main() {
    var str = "this is golang"
    var index =strings.Index(str,"go")
    fmt.PrintIn(index)    // 8 (判断字符串 go 出现的位置)
}
6、strings.Join()
package main 

import (
    "fmt"
    "strings"
)

func main() {
    var str = "Running-Snail"
    var arr = strings.Split(str,"-")     // [Running Snail]
    var str2 =strings.Join(arr,"*")      // Running*Snail
    fmt.PrintIn(arr)
    fmt.PrintIn(str2)
}   
7、单引号
  • 组成每个字符串的元素叫做“字符”,可以通过遍历字符串元素获得字符,字符用单引号(')
  • uint8类型,或者叫 byte 类型,代表 ASCII 码的一个字符
  • rune 类型,代表一个 UTF-8 字符
package main

import "fmt"

func main(){
    a := 'a'
    name := "snail"
    //当我们直接输出 byte(字符)的时候输出的是这个字符对应的码值
    fmt.PrintIn(a)    // 97 这里输出的是 a 字符串的 ASCII 值
    fmt.PrintIn(name)    // snail
    //如果我们要输出这个字符,需要格式化输出
    fmt.Printf("的值是%c",a)    //a的值是 a
}

三、字符串遍历

1、遍历字符串
package main

import "fmt"

func main(){
    s := "hello snail"
    for i := 0; i<len(s);i++ { //byte
        fmt.Printf("%v(%c)",s[I],s[I])
        // 104(h) 101(e) 108(l) 108(l) 111(o) 32( ) 115(s) 110(n) 97(a) 105(i) 108(l) 
    }
    
    fmt.PrintIn()    //打印一个换行

    for _,r := range s { //rune
        fmt.Prinf("%v=>%c",r,r)
        //104=>h 101=>e 108=>l 108=>l 111=>o 32=>  115=>s 110=>n 97=>a 105=>i 108=>l
    }
}
2.修改字符串
  • 要修改字符串,需要先将其转换成[]rune或 byte,完成后再转换为 string
  • 无论那种转换,都会重新分配内存,并复制字节数组
package main

import "fmt"

func main(){
    s1 := "snail"
    //强制类型转换
    byteS := []byte(s1)
    byteS1[0] = 'p'
    fmt.PrintIn(string(byteS1))    //pnail 

    s2 := "白萝卜"
    runeS2 := []rune(s2)
    runeS2[0] = '红'
    fmt.PrintIn(string(runeS2))    //红萝卜
}

四、转 String

1、sprintf 转 string
  • 注意:sprintf 使用中需要注意转换的格式
    • int 为%d
    • float 为%f
    • bool 为%t
    • byte 为%c
package main

import "fmt"

func main() {
    var i int = 20
    var f float64 = 12.456
    var t bool = true
    var b byte = 'a'
    var strs string
    
    strs=fmt.Sprintf("%d",i)    //把int 转换成 string
    fmt.Printf("类型: %T,值=%v\n",strs,strs)    //类型:string,值 =20

    strs= fmt.Sprintf("%f",f)    //把 float转换成 string
    fmt.Printf("类型: %T ,值=%v \n", strs, strs)  // 类型: string ,值=12.456000

	strs = fmt.Sprintf("%t", t)  // 把 bool 转换成 string
	fmt.Printf("类型: %T ,值=%v \n", strs, strs)  // 类型: string ,值=true

	strs = fmt.Sprintf("%c", b)  // 把 byte  转换成 string
	fmt.Printf("类型: %T ,值=%v \n", strs, strs)  // 类型: string ,值=a
}
2、strconv
package  main

import (
    "fmt"
    "strconv"
)

fun main () {
    //1、int转换成 string
    var num1 int = 20
    s1 := strong.Itoa(num1)
    fmt.Printf("类型:%T ,值=%v \n",s1,s1)    //类型:string,值=20

    //2、float 转 string
    var num2 float64 = 20.113123
    /*参数 1:要转换的值
    参数 2:格式化类型
    参数 3:保留的小数点 -1 (不对小数点格式化)
    参数 4:格式化的类型
    */

    s2 := strconv.FormatFloat(num2,'f',2,64)
    fmt.Printf("类型: %T ,值=%v \n", s2, s2)  // 类型: string ,值=20.11

	// 3、bool 转 string
	s3 := strconv.FormatBool(true)
	fmt.Printf("类型: %T ,值=%v \n", s3, s3)  // 类型: string ,值=20.11

	//4、int64 转 string
	var num3 int64 = 20
	s4 := strconv.FormatInt(num3, 10)  /* 第二个参数10为 进制 */
	fmt.Printf("类型 %T ,值=%v \n", s4, s4)  // 类型 string ,值=20
}

五、String 转其他

1、string 转 int
package main

import (
    "fmt"
    "strconv"
)

fun main() {
    var s = "1234"
    i64,_ := strconv.ParseInt(s,10,64)
    fmt.Printf("值:%v 类型:%T",i64,i64)    //值:1234 类型:int64
}
2、string 转 float
package main

import (
    "fmt"
    "strconv"
)    

func main() {
    str := "3.1415926535"
    v1,_ := strconv.ParseFloat(str,32)
    v2,_ := strconv.ParseFloat(str,64)
    fmt.Printf("值:%v 类型:%T\n",v1,v1)    // 值:3.1415927410125732 类型:float64
	fmt.Printf("值:%v 类型:%T", v2, v2)  // 值:3.1415926535 类型:float64
}
3、string 转 bool
package main
import (
	"fmt"
	"strconv"
)
func main() {
	b, _ := strconv.ParseBool("true")   // string 转 bool
	fmt.Printf("值:%v 类型:%T", b, b)  // 值:true 类型:bool
}
4、string 转字符
package main

import "fmt"

func main() {
    s := "hello snail"
    for _,r := range s{ //rune
        //104(h) 101(e) 108(l) 108(l) 111(o) 32( ) 115(s) 110(n) 97(a) 105(i) 108(l) 
        fmt.Printf("%v(%c)",r,r)
    }
    fmt.PrintIn()
}
5、字符串反转
package main

func Reverse(s string) string{
    r := []rune(s)
    for I,j:=0,len(r)-1;i<j;i,j=i+1,j-1 {
        r[I],r[j]=r[j],r[i]
    }
    return string(r)
}

func main(){
    a := "Hello, Wrold"
	println(a)
	println(Reverse(a))  // dlorW ,olleH
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1262219.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

String类讲解(1)

&#x1f435;本篇文章将讲解String类及其包含的方法 一、介绍String类 String属于引用类型&#xff0c;String类是Java的一个内置类&#xff0c;用于表示字符串&#xff0c;String类中具有许多方法&#xff0c;可以用来操作和处理字符串 二、字符串的构造 下面介绍三种构造字…

如何迁移数据到水经微图64位版?

我们在《为什么要升级水经微图到64位&#xff1f;》一文中&#xff0c;为大家分享了升级水经微图到64位的原因。 这里&#xff0c;我们再为大家分享一下在哪些情况下升级需要迁移已标注的数据&#xff0c;以及如何迁移已标注绘制的数据到水经微图64位中。 哪些情况需要迁移数…

Webshell混淆免杀的一些思路

简介 为了避免被杀软检测到&#xff0c;黑客们会对Webshell进行混淆免杀。本文将介绍一些Webshell混淆免杀的思路&#xff0c;帮助安全人员更好地防范Webshell攻击。静态免杀是指通过对恶意软件进行混淆、加密或其他技术手段&#xff0c;使其在静态分析阶段难以被杀毒软件或安…

基于oracle数据库的PLSQL编程以及存储过程的创建和使用

PL/SQL编程 declare begindbms_output.put_line(helloworld!);-- line表示换行 end;set serveroutput on; 开启打印输出 / 表示结束变量的声明与赋值 declarev_name varchar2(20) : 张三;v_sal number;v_addr varchar2(200); begin-- 直接赋值v_sal : 1111;-- 语句赋值selec…

继承JsonSerializer+注解实现自定义数据脱敏方案

1、数据脱敏 数据脱敏是一种保护隐私数据的技术&#xff0c;通过将敏感信息转化为非敏感信息来实现对数据的保护&#xff0c;以保护敏感隐私数据的可靠性和安全性。 数据脱敏可以分为可恢复和不可恢复两类: 可恢复类可以通过一定的方式恢复成原来的敏感数据。不可恢复类则无…

UTONMOS:元宇宙时代已经来临

当我们站在这个新的人工智能时代的十字路口&#xff0c;不可避免地要面对一个问题&#xff1a;在这个技术革新的大潮中&#xff0c;区块链技术还有没有生存和发展的空间&#xff1f;本文将深入探讨这个问题&#xff0c;分析区块链在人工智能时代的优势、挑战以及未来的可能性。…

二十章多线程

概念 有很多工作是可以同时完成的&#xff0c;这种思想放在Java中被称为并发&#xff0c;并发完成每一件事被称为线程。 程序员可以在程序中执行多个线程&#xff0c;每一个线程完成一个功能//与其他线程并发执行&#xff0c;这种机制被称为多线程&#xff0c;并不算所有编程…

Java 之 lambda 表达式(二)---- Stream 操作 API

目录 一. 前言 二. Stream 创建 2.1. 使用集合来创建 Stream 2.2. 使用数组创建 Stream 2.3. 由值创建 Stream 2.4. 由函数创建无限流 Stream 2.5. 代码示例 三. Stream 操作 3.1. 中间型操作 3.1.1. filter() 3.1.2. map() 3.1.3. mapToInt()、mapToLong()、mapTo…

ESP32-Web-Server编程- JS 基础5

ESP32-Web-Server编程- JS 基础5 概述 JS 编程内容颇多&#xff0c;我们提供一些简单的示例&#xff0c;先玩再学&#xff0c;边玩边学。 示例1-演示通过 JS 进行温度转换 资源链接 对应示例的 code 链接 &#xff08;点击直达代码仓库&#xff09; 示例2-增加网页弹窗 演…

【数据结构—单链表的实现】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 1. 链表的概念及结构 2. 单链表的实现 2.1单链表头文件——功能函数的定义 2.2单链表源文件——功能函数的实现 2.3 单链表源文件——功能的测试 3.具体的理解操作…

Selenium 学习(0.14)——软件测试之测试用例设计方法——因果图法2【基本步骤及案例】

1、因果图法的基本步骤 2、案例分析 1&#xff09;分析原因和结果 2&#xff09;关联原因和结果 投入1元5角或2元&#xff0c;按下“可乐”&#xff0c;送出“可乐”【暂时忽略找零】 投入2元&#xff0c;按下“可乐”或“雪碧”。找零5角&#xff0c;送出“可乐”或“雪…

vue中keep-alive的使用

什么是keep-alive&#xff1f; keep-alive是一个内置组件&#xff0c;用于缓存和管理组件的状态。 当 keep-alive包裹一个组件时&#xff0c;这个组件的状态将会被缓存起来&#xff0c;而不是每次重新渲染。这在多个视图之间切换时特别有用&#xff0c;可以避免重复的创建和销…

uniapp前端+python后端=微信小程序支付到底怎么开发???国内的资料为什么没一篇能讲清楚,简简单单的只需要3步就可以了-V2版本

一.微信小程序支付 真的&#xff0c;在接到这个任务的时候&#xff0c;本以为很简单&#xff0c;不就是普通的浏览器复制粘贴&#xff0c;最不济找下gpt给生成一下&#xff0c;但是到实际开发就不同了&#xff0c;不是后端出问题就是前端&#xff0c;搜资料&#xff0c;上百度…

【Rust】基本的语法概念

Rust初学习 常见概念变量与可变性变量常量隐藏 数据类型标量类型字符类型复合类型元组数组 函数参数语句和表达式具有返回值的函数 注释控制流使用循环重复执行 常见概念 变量与可变性 变量 fn main() {let x 5;println!("The value of x is: {x}");x 6;println…

AlphaFold的原理及解读

1、背景 蛋白质是生物体内一类重要的生物大分子&#xff0c;其结构复杂多样&#xff0c;蛋白质的结构对于理解其功能和参与的生物学过程具有重要意义。从生物学角度上看&#xff0c;蛋白质的结构可以分为四个层次&#xff1a;初级结构、二级结构、三级结构和四级结构。 初级结…

中英双语大模型ChatGLM论文阅读笔记

论文传送门&#xff1a; [1] GLM: General Language Model Pretraining with Autoregressive Blank Infilling [2] Glm-130b: An open bilingual pre-trained model Github链接&#xff1a; THUDM/ChatGLM-6B 目录 笔记AbstractIntroduction 框架总结1. 模型架构2. 预训练设置3…

MySQL的Linux安装

在MySQL官网下载压缩包MySQL :: Download MySQL Community Server (Archived Versions) 下载完成后将压缩包上传到Linux中。我这里是下的CentOS的压缩包。 并且用的是FinalShell连接工具&#xff0c;可以选择压缩包直接上传。 ​ 上传完毕后&#xff0c;新建mysql文件夹&…

[DASCTF 2023 0X401七月暑期挑战赛] web刷题记录

文章目录 EzFlask方法一 python原型链污染方法二 flask框架静态文件方法三 pin码计算 MyPicDisk方法一 字符串拼接执行命令方法二 phar反序列化 EzFlask 考点&#xff1a;python原型链污染、flask框架理解、pin码计算 源码如下 import uuidfrom flask import Flask, request, …

Linux驱动开发笔记(五):驱动连接用户层与内核层的文件操作集原理和Demo

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/134561660 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

OpenVINO异步Stable Diffusion推理优化方案

文章目录 Stable Diffusion 推理优化背景技术讲解&#xff1a;异步优化方案思路&#xff1a;异步推理优化原理OpenVINO异步推理Python API同步和异步实现方式对比 oneflow分布式调度优化优势&#xff1a;实现思路 总结&#xff1a; Stable Diffusion 推理优化 背景 2022年&am…