ZetCode

Julia 字符串

最后修改于 2023 年 10 月 19 日

在本文中,我们将展示如何在 Julia 中处理字符串。

在 Julia 中,字符串是字符的有限序列。它是一种数据类型,存储一系列数据值(通常是字节),其中元素根据字符编码通常代表字符。

用于字符串的内置具体类型是 String。它通过 UTF-8 编码支持全范围的 Unicode 字符。

当字符串字面量出现在源代码中时,它被称为字符串字面量。字符串字面量由两个双引号分隔(例如,“一只旧的猎鹰”)。

Julia 中的字符串是不可变的。

Julia 字符串简单示例

以下是一个简单的 Julia 字符串示例。

main.jl
word::String = "falcon"
println(word)

word2 = "hawk"
println(word2)

我们定义两个字符串并打印它们。

word::String = "falcon"
println(word)

我们显式定义 word 变量的类型。类型跟随 :: 字符。

word2 = "hawk"
println(word2)

在第二种情况下,类型由 Julia 推断。

$ julia main.jl 
falcon
hawk

Julia 字符串连接

Julia 使用 * 字符连接字符串。

main.jl
println("an" * " old " * "falcon")

n = 4
println("There are " * string(n) * " hawks")

在程序中,我们通过连接字符串来构建两个消息。

println("an" * " old " * "falcon")

这三个字符串使用 * 运算符连接在一起。

n = 4
println("There are " * string(n) * " hawks")

在第二种情况下,我们还有一个整数。整数通过 string 函数转换为字符串。

$ julia main.jl
an old falcon
There are 4 hawks

Julia 字符串转整数

int 内置函数将字符串转换为整数。

main.jl
vals = ("2", 1, "4", 6, "11")
a, b, c, d, e = vals

sum = parse(Int16, a) + b + parse(Int16, c) + d + parse(Int16, e)
println(sum)

我们有一个值的元组:整数和字符串。我们想计算所有值的总和。

a, b, c, d, e = vals

我们将元组解构为五个变量。

sum = parse(Int16, a) + b + parse(Int16, c) + d + parse(Int16, e)

我们对变量求和;字符串使用 parse 函数转换为整数。

$ julia main.jl
24

Julia 字符串重复

在下一个示例中,我们将展示如何在 Julia 中重复一个字符串。

main.jl
println(repeat("falcon ", 5))
println(repeat("hawk ", 3))
println(repeat(["hawk", "falcon"], 3))

字符串可以使用 repeat 函数重复。该函数将字符串或字符串数组作为第一个参数。第二个参数是计数。

$ julia repeat.jl
falcon falcon falcon falcon falcon 
hawk hawk hawk
["hawk", "falcon", "hawk", "falcon", "hawk", "falcon"]

Julia 字符串插值

插值字符串是可能包含插值表达式的字符串字面量。$ 特殊字符标识字符串字面量中的一个变量,该变量将被扩展为其值。表达式放在 $( ) 分隔符内。

main.jl
name = "John Doe"
age = 34 

msg = "$name is $age years old"
println(msg)

x = 12
y = 11

println("x + y = $(x + y)")

我们有两个插值字符串。

msg = "$name is $age years old"

我们构建一个包含两个变量 nameage 内容的字符串。它们前面都带有 $ 字符。字符串展开后,它包含这两个变量的值。

println("x + y = $(x + y)")

插值字符串可以包含表达式。

$ julia main.jl
John Doe is 34 years old
x + y = 23

Julia 字符串转义序列

转义字符是执行特定操作的特殊字符。例如,\n 字符开始一个新行。

main.jl
println("Three\t bottles of wine")
println("He said: \"I love ice skating\"")
println("Line 1:\nLine 2:\nLine 3:")

我们有一个包含转义字符的示例。

println("Three\t bottles of wine")

\t 转义字符插入一个制表符。

println("He said: \"I love ice skating\"")

我们通过用 \ 转义来在字符串字面量中插入双引号。

println("Line 1:\nLine 2:\nLine 3:")

使用 \n,我们创建了三行。

$ julia main.jl
Three    bottles of wine
He said: "I love ice skating"
Line 1:
Line 2:
Line 3:

Julia 原生字符串

原生字符串不解释转义序列。它们前面带有 raw 前缀。

main.jl
s1 = raw"deep \t forest"
s2 = raw"C:\Users\Admin\Documents"

println(s1)
println(s2)

在此代码示例中,我们使用逐字字符串。

s1 = raw"deep \t forest"

\t 特殊字符未被解释;它只会被打印到控制台。

s2 = raw"C:\Users\Admin\Documents"

当我们处理路径时,原生字符串很方便。

$ julia main.jl
deep \t forest
C:\Users\Admin\Documents

@sprintf 宏

我们可以使用 @sprintf 宏来格式化字符串。

main.jl
using Printf

name = "John Doe"
occupation = "gardener"

msg = @sprintf("%s is a %s", name, occupation)
println(msg)

该宏位于 Printf 模块中。

msg = @sprintf("%s is a %s", name, occupation)
println(msg)

我们使用 @sprintf 宏构建一个消息。%s 是期望字符串值的格式说明符。

$ julia main.jl
John Doe is a gardener

来源

Julia 字符串文档

在本文中,我们研究了 Julia 中的字符串。

作者

我叫 Jan Bodnar,我是一名充满激情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出所有 Julia 教程