Go 学习笔记(31)— 字符串 string、字符 rune、字节 byte、UTF-8 和 Unicode 区别以及获取字符串长度
1. 字符串 string 类型
Go
语言中字符串的内部实现使用 UTF-8
编码,通过 rune
类型,可以方便地对每个 UTF-8
字符进行访问。当然, Go
语言也支持按照传统的 ASCII
码方式逐字符进行访问。
- 字符串是常量,可以通过类似数组索引访问其字节单元,但是不能修改某个字节的值;
var a string = "hello,world"
b := a[0]
a[1] = "a" // error
内置的 len
函数可以返回一个字符串中的字节数目(不是 rune
字符数目)。
s := "hello, world"
fmt.Println(len(s)) // "12"
fmt.Println(s[0], s[7]) // "104 119" ('h' and 'w')
注意:第 i 个字节并不一定是字符串的第 i 个字符,因为对于非 ASCII
字符的 UTF8
编码会要两个或多个字节。
-
字符串转换为切片
[]byte(s)
要慎用,每转换一次需要复制一份内存,尤其是字符串数据量较大时; -
字符串末尾不包含
NULL
字符,与C/C++
不一样; -
字符串类型底层实现是一个二元的数据结构,一个是指针指向字节数组的起点,另一个是字符串的长度;
// runtime/string.gotype stringStruct struct {str unsafe . Pointer //指向底层字节数组的指针len int //字节数组长度
}
-
基于字符串创建的切片和原字符串指向相同的底层字符数组,一样不能修改,对字符串的切片操作返回的子串仍是
string
,而非slice
; -
字符串和切片的转换:字符串可以转换为字节数组,也可以转换为
Unicode
数组;
a := "hello , 世界!"
b := []byte(a)
c :=[]rune(a)
-
字符串支持连接运算,可以通过
len()
获取字符串的长度;len
是Golang
内置的一个函数,这个函数返回字符串的长度,切片长度,数组长度,通道长度。如果用于获取字符串长度时,当字符串为空,len
返回值是 0。 -
获取字符串中某个字节的地址属于非法行为,例如
&str[i]
; -
使用双引号
""
表示字符串时不能跨行,如果想要在源码中嵌入一个多行字符串时,就必须使用 ` 反引号(Esc 下面的字符),代码如下:
package mainimport "fmt"func main() {str := `first line,second line,third line,\r \n`
// 在这种方式下,反引号间换行将被作为字符串中的换行,但是所有的转义字符均无效,文本将会原样输出。fmt.Println(str)
}
输出:
first line,second line,third line,\r\n
示例代码如下:
package mainimport "fmt"func main() {var s string = "hello"var a string = ",world"s1 := s[0]s2 := s[:3]s3 := []byte(s)s4 := []rune(s)sLength := len(s)c := s + afmt.Printf("s1 is %v, s1 type is %T\n", s1, s1)fmt.Printf("s2 is %v, s2 type is %T\n", s2, s2)fmt.Printf("s3 is %v, s3 type is %T\n", s3, s3)fmt.Printf("s4 is %v, s4 type is %T\n", s4, s4)fmt.Printf("sLength is %v \n", sLength)fmt.Printf("c is %v \n", c)
}
输出结果:
s1 is 104, s1 type is uint8
s2 is hel, s2 type is string
s3 is [104 101 108 108 111], s3 type is []uint8
s4 is [104 101 108 108 111], s4 type is []int32
sLength is 5
c is hello,world
字符串值也可以用字符串面值方式编写,只要将一系列字节序列包含在双引号内即可:
"hello, 世界"
因为 Go
语言源文件总是用 UTF8
编码,并且 Go
语言的文本字符串也以 UTF8
编码的方式处理,因此我们可以将 Unicode
码点也写到字符串面值中。
在一个双引号包含的字符串面值中,可以用以反斜杠\
开头的转义序列插入任意的数据。下面的换行、回车和制表符等是常见的 ASCII
控制代码的转义方式:
\a 响铃
\b 退格
\f 换页
\n 换行
\r 回车
\t 制表符
\v 垂直制表符
\' 单引号(只用在 '\'' 形式的rune符号面值中)
\" 双引号(只用在 "..." 形式的字符串面值中)
\\ 反斜杠
可以通过十六进制或八进制转义在字符串面值中包含任意的字节。
- 一个十六进制的转义形式是
\xhh
,其中两个h
表示十六进制数字(大写或小写都可以); - 一个八进制转义形式是
\ooo
,包含三个八进制的o
数字(0 到 7),但是不能超过\377
(译注:对应一个字节的范围,十进制为255);
2. 字符 rune 类型
Go
默认的字符编码就是 UTF-8 类型。Go
语言的字符有以下两种:
-
一种是
uint8
类型,或者叫byte
型(byte
是unit
的别名),代表了 ASCII 码的一个字符。 -
另一种是
rune
类型,代表一个UTF-8
字符,当需要处理中文、日文或者其他复合字符时,则需要用到rune
类型。rune
类型等价于int32
类型,占用 4 个字节。
rune
类型是 int32
的一个别名, rune
主要用于表示 UTF-8
编码时的字符类型。通常情况下一个字符就是一个字节,在 Golang
中用 byte
关键字来表示字节,而 UTF-8
编码的字符,可能会存在一个字符用三个字节表示。如果使用 byte
类型来存储 UTF-8
编码的字符串,就会导致读取单个字节时值没有意义的情况。所以 Golang
中使用 rune
来存储 UTF-8
编码的字符。
3. 字节 byte 类型
byte
用来表示字节,一个字节是 8 位。定义一个字节类型变量的语法是:
var b1 byte
var b2 = 'c'
var b3 byte = 'c'
b4 := 'c'
byte
类型变量默认初始值是 0。byte
类型是 uint8
类型的一个别名。
4. UTF-8 和 Unicode 有何区别
Unicode
与 ASCII
类似,都是一种字符集。
Unicode
收集了这个世界上所有的符号系统,包括重音符号和其它变音符号,制表符和回车符,还有很多神秘的符号,每个符号都分配一个唯一的 Unicode
码点, Unicode
码点对应 Go
语言中的 rune
整数类型( rune
是 int32
等价类型)。
我们可以将一个符号序列表示为一个 int32
序列。这种编码方式叫 UTF-32
或 UCS-4
,每个 Unicode
码点都使用同样大小的 32bit 来表示。这种方式比较简单统一,但是它会浪费很多存储空间,因为大多数计算机可读的文本是 ASCII
字符,本来每个 ASCII
字符只需要 8bit 或 1 字节就能表示。而且即使是常用的字符也远少于 65,536 个,也就是说用 16bit 编码方式就能表达常用字符。但是,还有其它更好的编码方法吗?
UTF8
是一个将 Unicode
码点编码为字节序列的变长编码。 UTF8
编码使用 1 到 4 个字节来表示每个 Unicode
码点, ASCII
部分字符只使用 1 个字节,常用字符部分使用 2 或 3 个字节表示。
每个符号编码后第一个字节的高端 bit 位用于表示编码总共有多少个字节。如果第一个字节的高端 bit为 0,则表示对应 7bit 的 ASCII
字符, ASCII
字符每个字符依然是一个字节,和传统的 ASCII
编码兼容。如果第一个字节的高端 bit 是 110,则说明需要 2 个字节;后续的每个高端 bit 都以 10 开头。更大的 Unicode
码点也是采用类似的策略处理。
0xxxxxxx runes 0-127 (ASCII)
110xxxxx 10xxxxxx 128-2047 (values <128 unused)
1110xxxx 10xxxxxx 10xxxxxx 2048-65535 (values <2048 unused)
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 65536-0x10ffff (other values unused)
变长的编码无法直接通过索引来访问第 n 个字符,但是 UTF8
编码获得了很多额外的优点:
- 首先
UTF8
编码比较紧凑,完全兼容ASCII
码,并且可以自动同步; - 它可以通过向前回朔最多 3 个字节就能确定当前字符编码的开始字节的位置。它也是一个前缀编码,所以当从左向右解码时不会有任何歧义也并不需要向前查看(译注:像
GBK
之类的编码,如果不知道起点位置则可能会出现歧义)。 - 没有任何字符的编码是其它字符编码的子串,或是其它编码序列的字串,因此搜索一个字符时只要搜索它的字节编码序列即可,不用担心前后的上下文会对搜索结果产生干扰。同时
UTF8
编码的顺序和Unicode
码点的顺序一致,因此可以直接排序UTF8
编码序列。同时因为没有嵌入的NULL
(0)字节,可以很好地兼容那些使用NULL
作为字符串结尾的编程语言。
Go
语言的源文件采用 UTF8
编码,并且 Go
语言处理 UTF8
编码的文本也很出色。 unicode
包提供了诸多处理 rune
字符相关功能的函数(比如区分字母和数字,或者是字母的大写和小写转换等), unicode/utf8
包则提供了用于 rune
字符序列的 UTF8
编码和解码的功能。
Go
语言字符串面值中的 Unicode
转义字符让我们可以通过 Unicode
码点输入特殊的字符。有两种形式:
\uhhhh
对应 16bit 的码点值;\Uhhhhhhhh
对应 32bit 的码点值;
其中 h 是一个十六进制数字,一般很少需要使用 32bit 的形式。每一个对应码点的 UTF8 编码。例如:下面的字母串面值都表示相同的值:
"世界"
"\xe4\xb8\x96\xe7\x95\x8c"
"\u4e16\u754c"
"\U00004e16\U0000754c"
上面三个转义序列都为第一个字符串提供替代写法,但是它们的值都是相同的。
Unicode
转义也可以使用在 rune
字符中。下面三个字符是等价的:
'世' '\u4e16' '\U00004e16'
对于小于 256 的码点值可以写在一个十六进制转义字节中,例如\x41
对应字符 'A'
,但是对于更大的码点则必须使用\u
或\U
转义形式。因此,\xe4\xb8\x96
并不是一个合法的 rune
字符,虽然这三个字节对应一个有效的 UTF8
编码的码点。
我们看下包含了中西两种字符。如下所示字符串包含 13 个字节,以 UTF8
形式编码,但是只对应 9 个 Unicode
字符:
import "unicode/utf8"
s := "Hello, 世界"
fmt.Println(len(s)) // "13"
fmt.Println(utf8.RuneCountInString(s)) // "9"
为了处理这些真实的字符,我们需要一个 UTF8
解码器。 unicode/utf8
包提供了该功能,我们可以这样使用:
for i := 0; i < len(s); {r, size := utf8.DecodeRuneInString(s[i:])fmt.Printf("%d\t%c\n", i, r)i += size
}
字符集为每个字符分配一个唯一的 ID,我们使用到的所有字符在 Unicode 字符集中都有一个唯一的 ID,例如上面例子中的 a 在 Unicode 与 ASCII 中的编码都是 97。汉字“你”在 Unicode 中的编码为 20320,在不同国家的字符集中,字符所对应的 ID 也会不同。而无论任何情况下,Unicode 中的字符的 ID 都是不会变化的。
UTF-8 是编码规则,将 Unicode 中字符的 ID 以某种方式进行编码,UTF-8 的是一种变长编码规则,从 1 到 4 个字节不等。编码规则如下:
- 0xxxxxx 表示文字符号 0~127,兼容 ASCII 字符集。
- 从 128 到 0x10ffff 表示其他字符。
根据这个规则,拉丁文语系的字符编码一般情况下每个字符占用一个字节,而中文每个字符占用 3 个字节。
广义的 Unicode 指的是一个标准,它定义了字符集及编码规则,即 Unicode 字符集和 UTF-8、UTF-16 编码等。
5. golang 中获取字符串长度
5.1 不同编码符串定义
因为不同字符具有不同的编码格式。拉丁字母一个字符只要一个字节就行,而中文则可能需要两到三个字节;UNICODE
把所有字符设置为 2 个字节,UTF-8
格式则把所有字符设置为 1–3 个字节。
因此,字符串长度的获得,不等于按字节数查找,而要根据不同字符编码查找。
5.2 获取字符串长度的方法
golang
有自己的默认判断长度函数 len()
;但遗憾的是,len()
函数判断字符串长度的时候,是判断字符的字节数而不是字符长度。因此,在中文字符下,应该采用如下方法:
- 使用
bytes.Count()
统计 - 使用
strings.Count()
统计 - 将字符串转换为
[]rune
后调用len
函数进行统计 - 使用
utf8.RuneCountInString()
统计
由于中文字符可能占用 1-3 个字节,所以 len()
获取的长度会比其它的大一些。
package mainimport ("bytes""fmt""strings""unicode/utf8"
)func main() {s := "hello,您好"s_length := len(s)fmt.Println(s_length) // 12fmt.Println(len([]byte(s))) // 12byte_length := f1(s)fmt.Println(byte_length) // 8string_length := f2(s)fmt.Println(string_length) // 8rune_length := f3(s)fmt.Println(rune_length) // 8utf_length := f4(s)fmt.Println(utf_length) // 8
}func f1(s string) int {return bytes.Count([]byte(s), nil) - 1
}func f2(s string) int {return strings.Count(s, "") - 1
}func f3(s string) int {return len([]rune(s))
}func f4(s string) int {return utf8.RuneCountInString(s)
}
6. 字符串和Byte切片
标准库中有四个包对字符串处理尤为重要: bytes
、 strings
、 strconv
和 unicode
包。
strings
包提供了许多如字符串的查询、替换、比较、截断、拆分和合并等功能。bytes
包也提供了很多类似功能的函数,但是针对和字符串有着相同结构的[]byte
类型。因为字符串是只读的,因此逐步构建字符串会导致很多分配和复制。在这种情况下,使用bytes.Buffer
类型将会更有效。strconv
包提供了布尔型、整型数、浮点数和对应字符串的相互转换,还提供了双引号转义相关的转换。unicode
包提供了IsDigit
、IsLetter
、IsUpper
和IsLower
等类似功能,它们用于给字符分类。每个函数有一个单一的rune
类型的参数,然后返回一个布尔值。而像ToUpper
和ToLower
之类的转换函数将用于rune
字符的大小写转换。所有的这些函数都是遵循Unicode
标准定义的字母、数字等分类规范。strings
包也有类似的函数,它们是ToUpper
和ToLower
,将原始字符串的每个字符都做相应的转换,然后返回新的字符串。
下面例子的 basename
函数灵感源于 Unix shell
的同名工具。在我们实现的版本中, basename(s)
将看起来像是系统路径的前缀删除,同时将看似文件类型的后缀名部分删除:
fmt.Println(basename("a/b/c.go")) // "c"
fmt.Println(basename("c.d.go")) // "c.d"
fmt.Println(basename("abc")) // "abc"
path
和 path/filepath
包提供了关于文件路径名更一般的函数操作。使用斜杠分隔路径可以在任何操作系统上工作。斜杠本身不应该用于文件名,但是在其他一些领域可能会用于文件名,例如 URL
路径组件。
相比之下, path/filepath
包则使用操作系统本身的路径规则,例如 POSIX
系统使用 /foo/bar
,而 Microsoft Windows
使用c:\foo\bar
等。
一个字符串是包含只读字节的数组,一旦创建,是不可变的。相比之下,一个字节 slice
的元素则可以自由地修改。
字符串和字节 slice
之间可以相互转换:
s := "abc"
b := []byte(s)
s2 := string(b)
从概念上讲,一个 []byte(s)
转换是分配了一个新的字节数组用于保存字符串数据的拷贝,然后引用这个底层的字节数组。编译器的优化可以避免在一些场景下分配和复制字符串数据,但总的来说需要确保在变量 b
被修改的情况下,原始的 s
字符串也不会改变。将一个字节 slice
转换到字符串的 string(b)
操作则是构造一个字符串拷贝,以确保 s2
字符串是只读的。
为了避免转换中不必要的内存分配, bytes
包和 strings
同时提供了许多实用函数。下面是 strings
包中的六个函数:
func Contains(s, substr string) bool
func Count(s, sep string) int
func Fields(s string) []string
func HasPrefix(s, prefix string) bool
func Index(s, sep string) int
func Join(a []string, sep string) string
bytes
包中也对应的六个函数:
func Contains(b, subslice []byte) bool
func Count(s, sep []byte) int
func Fields(s []byte) [][]byte
func HasPrefix(s, prefix []byte) bool
func Index(s, sep []byte) int
func Join(s [][]byte, sep []byte) []byte
它们之间唯一的区别是字符串类型参数被替换成了字节 slice
类型的参数。
bytes
包还提供了 Buffer
类型用于字节 slice
的缓存。一个 Buffer
开始是空的,但是随着 string
、 byte
或 []byte
等类型数据的写入可以动态增长,一个 bytes.Buffer
变量并不需要初始化,因为零值也是有效的:
// intsToString is like fmt.Sprint(values) but adds commas.
func intsToString(values []int) string {var buf bytes.Bufferbuf.WriteByte('[')for i, v := range values {if i > 0 {buf.WriteString(", ")}fmt.Fprintf(&buf, "%d", v)}buf.WriteByte(']')return buf.String()
}
func main() {fmt.Println(intsToString([]int{1, 2, 3})) // "[1, 2, 3]"
}
当向 bytes.Buffer
添加任意字符的 UTF8
编码时,最好使用 bytes.Buffer
的 WriteRune
方法,但是 WriteByte
方法对于写入类似 '['
和 ']'
等 ASCII
字符则会更加有效。
7. 字符串和数字的转换
除了字符串、字符、字节之间的转换,字符串和数值之间的转换也比较常见。由 strconv
包提供这类转换功能。
将一个整数转为字符串有两种方法:
- 一种方法是用
fmt.Sprintf
返回一个格式化的字符串; - 另一个方法是用
strconv.Itoa(“整数到ASCII”)
:
x := 123
y := fmt.Sprintf("%d", x)
fmt.Println(y, strconv.Itoa(x)) // "123 123"
FormatInt
和 FormatUint
函数可以用不同的进制来格式化数字:
fmt.Println(strconv.FormatInt(int64(x), 2)) // "1111011"
fmt.Printf
函数的 %b
、 %d
、 %o
和 %x
等参数提供功能往往比 strconv
包的 Format
函数方便很多,特别是在需要包含有附加额外信息的时候:
s := fmt.Sprintf("x=%b", x) // "x=1111011"
如果要将一个字符串解析为整数,可以使用 strconv
包的 Atoi
或 ParseInt
函数,还有用于解析无符号整数的 ParseUint
函数:
x, err := strconv.Atoi("123") // x is an int
y, err := strconv.ParseInt("123", 10, 64) // base 10, up to 64 bits
ParseInt
函数的第三个参数是用于指定整型数的大小;例如 16 表示 int16
,0 则表示 int
。在任何情况下,返回的结果 y 总是 int64
类型,你可以通过强制类型转换将它转为更小的整数类型。
有时候也会使用 fmt.Scanf
来解析输入的字符串和数字,特别是当字符串和数字混合在一行的时候,它可以灵活处理不完整或不规则的输入。
参考:
Go 语言圣经
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- Web浏览器(B/S)播放插件
Web浏览器(B/S)播放插件说明 1.1 BS播放插件原理说明 首先,一个视频的播放分为三个阶段:视频源对接、解码、播放,完成这三个阶段的参与者有两个:Web浏览器和BS插件。我们要做的就是划分三个阶段,哪些交给插件去做,哪些交给浏览器去做 (1)视频源对接:这个只能交给插件…...
2024/4/30 22:26:28 - 对给git配置邮箱和用户名的理解
转载于帅气的大博哥一:前提 在别的文章里我已经提到了,远程仓库一般支持两种协议:SSH和HTTPS,SSH协议只认机器,HTTPS协议只认账号;也即为:如果使用SSH操作远程仓库的话,我们需要使用公钥和私钥对来做权限的认证,如果使用HTTPS操作远程仓库,则需要使用账号密码来做权限…...
2024/4/17 5:41:40 - python自学日记32——基础查漏补缺(2)
python自学日记32——基础查漏补缺(2) 跟着各种教程学了很久,发现很多基础的问题被问到还是答不上来,然后决定把基础中漏掉的觉得有用的内容补一下。 首先做个测验: #1. 思考下面三条语句,他们会改变A打印出的值吗? A = spam B = A B = shrubbery#2. 思考下面三条语句,他…...
2024/4/17 20:55:26 - LeetCode第一题——曼哈顿距离
你现在手里有一份大小为 N x N 的『地图』(网格) grid,上面的每个『区域』(单元格)都用 0 和 1 标记好了。其中 0 代表海洋,1 代表陆地,你知道距离陆地区域最远的海洋区域是是哪一个吗?请返回该海洋区域到离它最近的陆地区域的距离。 我们这里说的距离是『曼哈顿距离』…...
2024/4/30 22:03:40 - 进制转换(10-2)
题目描述 将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。 输入描述: 多组数据,每行为一个长度不超过30位的十进制非负整数。 (注意是10进制数字的个数可能有30个,而非30bits的整数) 输出描述: 每行输出对应的二进制数。 示例1 输入 0 1 3 8 输出 0 1 11 10…...
2024/4/17 5:43:04 - pycharm中不省略打印完整的表
在得出表格结果的代码前加如下代码使行列均不省略,打印完整表格 pd.set_option(display.max_columns, None) #显示完整的列 pd.set_option(display.max_rows, None) #显示完整的行...
2024/4/17 5:43:16 - idea删除 maven工程列表中重复模块
前提 项目A有个子模块service不能被maven识别了 是想通过导入模块的方式导入该模块被maven识别 但是导入的时候不小心在项目A里面添加了项目A副本一摸一样的子模块 service问题 然后下面这样十分混乱。1.通过移除模块,但是reimport还是会显示在maven列表2.通过拷贝工程重新用i…...
2024/4/23 14:51:01 - 学习笔记--吴恩达 Deeplearning 第一课 第三周 分类问题(答案及知识点总结)
单隐层平面数据分类 程序步骤 1-模块导入 import numpy as np #使用Python进行科学计算的基本包 import matplotlib.pyplot as plt from testCases_v2 import * #提供了一些测试示例来评估函数的正确性 import sklearn #为数据挖掘和数据分析提供了简单有效的工具 import skl…...
2024/4/23 14:50:53 - C语言实现(九九乘法表)
使用VS2019ISO C++14 标准 (/std:c++14)9*9乘法表输出9*9的乘法表//输出9 * 9口诀。 //本练习不涉及报错处理机制!#include<stdio.h> int main() {//采用的思路,一行一行打印int i,j;for (i = 1; i <= 9; i++) {for (j = 1; j <= i; j++) {printf("%d*%d=%2…...
2024/4/23 14:50:55 - Java——成员变量(类变量,实例变量)与局部变量的区别
声明的位置 (1)成员变量:类中方法外 (2)局部变量:方法()的形参列表中;方法体{}中;代码块中 运行时在内存中的位置 (1)成员变量: 类变量:方法区中;实例变量:堆 (2)局部变量: native方法中的局部变量:本地方法栈 非native方法中的局部变量:虚拟机栈 修饰符 …...
2024/4/23 14:50:54 - 天为什么是蓝色的
天为什么是蓝色的:...
2024/4/23 14:50:50 - 深度残差网络+自适应参数化ReLU激活函数:调参记录22(Cifar10~95.25%)
本文在调参记录21的基础上,将残差模块的个数,从60个增加到120个,测试深度残差网络+自适应参数化ReLU激活函数在Cifar10数据集上的效果。 自适应参数化ReLU激活函数的基本原理如下:Keras程序: #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created …...
2024/4/23 14:50:56 - 华为云七天前端研发的学习笔记
文章目录前言企业开发前端流程介绍个人理解如下:实际上常用git命令前端知识串讲总体框架常用angular命令安装库常用命令系统设计文章发布管理体系的搭建后端的搭建文档发布系统的快速开发引入devui组件库echarts的开发markdown的开发企业级表格管理的开发页面结构规划组件划分…...
2024/4/23 14:50:49 - 来来来,用 C++ 写个有限状态机(一)
〇、先暂停我简单说两句啊一年前写的文章了,之前更新在 github pages 上,疏于管理,现在觉得还是把这些文档放在 CSDN 好了,自己看起来也方便。 2020.5.18 十元有限状态机是一个很常用的技术,在流程控制和游戏AI中都比较实用,因为状态机编程简单又很符合直觉。本文是参考《…...
2024/4/23 14:50:47 - 《关于我把这里当成错题集使唤这档子事儿》
搬去博客园了,以后这里主要当错题集使唤了 新家链接:康宇的博客 搬迁的原因有以下几点: 其一是发现了博客园可定制程度极高,支持自定义js,有了这玩意整个页面都能大变脸了。CSDN的页面都是千人一面,没有自己家的感觉。 其二是CSDN商业气息越来越浓郁了,发个博客都会提醒你…...
2024/4/23 14:50:53 - Java中String在内存中存储方式
String类型 基本数据类型和引用类型的区别主要在于基本数据类型是分配在栈上的,而引用类型是分配在堆上的。因为String是一个类,所以Java中的字符串String属于引用数据类型。 String存储 JDK1.8中JVM把String常量池移入了堆中,针对String对象又做了特殊对待。主要是把heap区…...
2024/4/23 14:50:52 - vue-cli3使用axios请求后端(Python+Django)的数据
注意:我是负责前端部分的,后端是同学在负责,所以我只负责一个前后端的对接。背景是一个在线商城。 首先清楚前端是作为客户端,请求后端服务端的消息。所以前端后端都run起来。 后端的同学给了我这样的接口文档:因此后端请求这个url就能够返回数据:接下来是前端的问题,前…...
2024/4/23 14:50:45 - 【经验谈】中期答辩的那些事
文章目录中期答辩 中期答辩 时间:6月21日 内容:毕业设计进度及后续安排 专业实践记录(不知道你们学硕有木有,反正专硕是有的)答辩准备时间:我是两周 答辩要点:主要工作内容,两个以上改进点,并且有确切的实验结果 图表,示意图,实验结果清晰 未来一年的实验计划,按月…...
2024/4/15 8:19:29 - PYNQ-Z2上手笔记之示例程序运行
之前买的PYNQ-Z2开发板已经装好系统,后来由于工作实在太忙没下文了。。。一个月后终于忙完了工作,现在把Z2开发板拿出来,嗯,看下还能开机不。还好,正常点亮了,就是夏天到了,这个散热片感觉压不住处理器的洪荒之力了。感觉学编程语言,入门就是从hello world开始,学硬件…...
2024/4/27 17:53:09 - JDBC: 执行MySQL语句时,bit类型的数值在java代码中应该怎么表示?
目录Windows Note前提描述问题解决问题思路梳理乌龙一场后续(值得小白一看) Window’s Note 记录自己在实际操作中用到的问题以及最后的解决方案 前提描述 注册页面用户填写信息后需要执行insert()方法向数据库中插入新用户的信息,需要插入的用户信息变量在数据库中定义如下:…...
2024/4/17 5:42:58
最新文章
- 跨语言摘要CLS近期论文研究总结(一)
1. A Cross-Lingual Summarization method based on cross-lingual Fact-relationship Graph Generation 基于跨语言事实关系图生成的跨语言摘要方法学习 首先,从源语言文档和目标语言参考摘要中提取事实三重信息,并构建其事实关系图。 然后,…...
2024/4/30 23:52:27 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - 免费的GPT-3.5 API服务aurora
什么是 aurora ? aurora 是利用免登录 ChatGPT Web 提供的无限制免费 GPT-3.5-Turbo API 的服务,支持使用 3.5 的 access 调用。 【注意】:仅 IP 属地支持免登录使用 ChatGPT的才可以使用(也可以自定义 Baseurl 来绕过限制&#x…...
2024/4/30 7:06:06 - JavaEE 初阶篇-生产者与消费者模型(线程通信)
🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 生产者与消费者模型概述 2.0 在生产者与消费者模型中涉及的关键概念 2.1 缓冲区 2.2 生产者 2.3 消费者 2.4 同步机制 2.5 线程间通信 3.0 实现生产者与消费者模…...
2024/4/30 2:26:26 - 【C++】map set 底层刨析
文章目录 1. 红黑树的迭代器2. 改造红黑树3. map 的模拟实现4. set 的模拟实现 在 C STL 库中,map 与 set 的底层为红黑树,那么在不写冗余代码的情况下使用红黑树同时实现 map 与 set 便是本文的重点。 1. 红黑树的迭代器 迭代器的好处是可以方便遍历&…...
2024/4/30 4:03:28 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/4/29 23:16:47 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/30 18:14:14 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/29 2:29:43 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/4/30 18:21:48 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/27 17:58:04 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/27 14:22:49 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/28 1:28:33 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/30 9:43:09 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/27 17:59:30 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/25 18:39:16 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/28 1:34:08 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/29 20:46:55 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/30 22:21:04 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/4/26 23:04:58 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/27 23:24:42 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/28 5:48:52 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/30 9:42:22 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/4/30 9:43:22 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/30 9:42:49 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57