Engee 文档
Notebook

使用二进制字符串

此示例讨论使用Julia编程语言处理二进制字符串,包括创建、操作和基本字符串操作。

导言

什么是二进制字符串,它们用于什么?

二进制字符串是可以包含文本数据和任意二进制数据的字节序列。 与常规文本字符串不同,二进制字符串可以包括不可打印的字符、空字节和其他特殊值。 它们广泛用于处理文件、网络协议、数据序列化以及需要对数据内容进行精确字节级控制的其他任务。

主要部分

创建字符串

In [ ]:
a = "123\x00 abc "
b = "456" * '\x09'
c = "789"
println(a)
println(b)
println(c)
123 abc 
456	
789

在这个块中,我们创建了三行:

-线路 a 包含文本"123"后跟零字节 \x00,然后一个空格,字母"abc"和另一个空格
-线路 b 它是通过连接字符串"456"和制表符创建的。 \x09
-线路 c 包含一个简单的字符串"789"

字符串比较

In [ ]:
println("(a == b) is $(a == b)")
(a == b) is false

在这里,我们比较字符串 ab 为了平等。 操作员 == 检查字符串是否以相同的顺序包含相同的字符。 从台词开始 ab 它们包含不同的数据,结果将为false。

复制行

In [ ]:
A = a
B = b
C = c
println(A)
println(B)
println(C)
123 abc 
456	
789

在这个块中,我们创建了行的副本 a, bc 通过将它们分配给新变量 A, BC. 在Julia中,字符串是不可变的,因此赋值会创建对同一字符串的引用,而不是内存中的新副本。

检查字符串是否为空

In [ ]:
if length(a) == 0
    println("string a is empty")
else
    println("string a is not empty")
end
string a is not empty

检查字符串是否为 a 使用函数清空 length(),它返回字符串中的字符数。 如果长度为零,则字符串为空,否则不为空。

将字符添加到字符串

In [ ]:
a = a * '\x64'
println(a)
123 abc d

添加符号 \x64 (对应于ASCII中的字母'd')到字符串的末尾 a 使用连接运算符 *. 请注意,在Julia中,字符可以是长达32位的Unicode字符。

提取子字符串

In [ ]:
e = a[1:6]
println(e)
123 a

从字符串中提取子字符串 a,从第1个字符开始,以第6个字符结束(含)。 在Julia中,索引从1开始,而不是0,就像在其他一些编程语言中一样。

重复行

In [ ]:
b4 = b ^ 4
println(b4)
456	456	456	456	

重复行 b 四次使用指数运算符 ^. 这是创建重复字符序列的方便方法。

替换子字符串

In [ ]:
r = replace(b4, "456" => "xyz")
println(r)
xyz	xyz	xyz	xyz	

将字符串中所有出现的子字符串"456"替换为"xyz" b4 使用函数 replace(). 操作员 => 创建要替换的键值对。

组合字符串

In [ ]:
d = a * b * c
println(d)
123 abc d456	789

组合线条 a, bc 在一行中 d 使用连接运算符 *. 所有三个字符串将以一个字符序列连接。

结论

在这个例子中,我们查看了在Julia中使用二进制字符串的基本操作:创建具有各种字符(包括不可打印的字符)的字符串,比较字符串,复制,检查空性,添加字符,提取子字符串,重复字符串,替换子字符串和组合字符串。 我们学习了如何处理不同类型的字符,包括空字节、制表符和其他特殊字符。 这些技能对于处理文件、网络协议和其他需要精确控制二进制数据的任务非常有用。

该示例是使用[Rosetta代码]的材料开发的(https://rosettacode.org/wiki/Binary_strings