朱莉娅 - 弦乐
字符串可以定义为一个或多个字符的有限序列。它们通常用双引号引起来。例如:“这是 Julia 编程语言”。以下是关于字符串的要点 -
字符串是不可变的,即一旦创建就无法更改它们。
使用两个特定字符时需要格外小心 -双引号(“)和美元符号($)。这是因为如果我们想在字符串中包含双引号字符,那么它前面必须有一个反斜杠;否则我们会得到不同的结果,因为字符串的其余部分将被解释为 Julia 代码。另一方面,如果我们想包含美元符号,那么它前面还必须有一个反斜杠,因为美元符号用于字符串插值。/p>
在 Julia 中,用于字符串和字符串文字的内置具体类型是String ,它通过 UTF-8 编码支持全范围的Unicode字符。
Julia 中的所有字符串类型都是抽象类型AbstractString的子类型。如果您希望 Julia 接受任何字符串类型,则需要将该类型声明为AbstractString。
Julia 有一个用于表示单个字符的一流类型。它称为AbstractChar。
人物
单个字符用Char值表示。Char 是一种 32 位原始类型,可以转换为数值(表示 Unicode 代码点)。
julia> 'a' 'a': ASCII/Unicode U+0061 (category Ll: Letter, lowercase) julia> typeof(ans) Char
我们可以将 Char 转换为其整数值,如下所示 -
julia> Int('a') 97 julia> typeof(ans) Int64
我们还可以将整数值转换回 Char,如下所示 -
julia> Char(97) 'a': ASCII/Unicode U+0061 (category Ll: Letter, lowercase)
使用 Char 值,我们可以进行一些算术和比较。这可以借助以下示例来理解 -
julia> 'X' < 'x' true julia> 'X' <= 'x' <= 'Y' false julia> 'X' <= 'a' <= 'Y' false julia> 'a' <= 'x' <= 'Y' false julia> 'A' <= 'X' <= 'Y' true julia> 'x' - 'b' 22 julia> 'x' + 1 'y': ASCII/Unicode U+0079 (category Ll: Letter, lowercase)
用双引号或三重双引号分隔
正如我们所讨论的,Julia 中的字符串可以使用双引号或三双引号来声明。例如,如果您需要向字符串中的某个部分添加引号,则可以使用双引号和三双引号来执行此操作,如下所示 -
julia> str = "This is Julia Programming Language.\n" "This is Julia Programming Language.\n" julia> """See the "quote" characters""" "See the \"quote\" characters"
使用 end 执行算术和其他运算
就像普通值一样,我们可以用 end 执行算术以及其他操作。检查下面给出的示例 -
julia> str[end-1] '.': ASCII/Unicode U+002E (category Po: Punctuation, other) julia> str[end÷2] 'g': ASCII/Unicode U+0067 (category Ll: Letter, lowercase)
使用范围索引提取子字符串
我们可以使用范围索引从字符串中提取子字符串。检查下面给出的示例 -
julia> str[6:9] "is J"
使用子字符串
在上面的方法中,Range 索引会复制原始字符串的选定部分,但我们可以使用 SubString 创建字符串视图,如下例所示 -
julia> substr = SubString(str, 1, 4) "This" julia> typeof(substr) SubString{String}
Unicode 和 UTF-8
Julia 编程语言完全支持 Unicode 字符和字符串。在字符文字中,Unicode \u 和 \U 转义序列以及所有标准 C 转义序列可用于表示 Unicode 代码点。如给定的示例所示 -
julia> s = "\u2200 x \u2203 y" "∀ x ∃ y"
另一种编码是 UTF-8,一种可变宽度编码,用于对字符串文字进行编码。这里的变宽编码是指并非所有字符都以相同数量的字节(即代码单元)进行编码。例如,在 UTF-8 中 -
ASCII 字符(代码点小于 080(128))使用单个字节进行编码,就像它们在 ASCII 中一样。
另一方面,代码点 080(128) 及以上使用多个字节进行编码(每个字符最多四个字节)。
我们上面提到的代码单元(UTF-8 的字节)是 Julia 中的字符串索引。它们实际上是用于编码任意字符的固定宽度构建块。换句话说,字符串中的每个索引不一定都是有效索引。您可以查看下面的示例 -
julia> s[1] '∀': Unicode U+2200 (category Sm: Symbol, math) julia> s[2] ERROR: StringIndexError("∀ x ∃ y", 2) Stacktrace: [1] string_index_err(::String, ::Int64) at .\strings\string.jl:12 [2] getindex_continued(::String, ::Int64, ::UInt32) at .\strings\string.jl:220 [3] getindex(::String, ::Int64) at .\strings\string.jl:213 [4] top-level scope at REPL[106]:1,
字符串连接
连接是最有用的字符串操作之一。以下是串联的示例 -
julia> A = "Hello" "Hello" julia> B = "Julia Programming Language" "Julia Programming Language" julia> string(A, ", ", B, ".\n") "Hello, Julia Programming Language.\n"
我们还可以借助 * 来连接 Julia 中的字符串。下面给出了相同的示例 -
julia> A = "Hello" "Hello" julia> B = "Julia Programming Language" "Julia Programming Language" julia> A * ", " * B * ".\n" "Hello, Julia Programming Language.\n"
插值法
使用串联来连接字符串有点麻烦。因此,Julia 允许对字符串进行插值,并减少对字符串的这些详细调用的需要。可以使用美元符号 ($) 来完成此插值。例如 -
julia> A = "Hello" "Hello" julia> B = "Julia Programming Language" "Julia Programming Language" julia> "$A, $B.\n" "Hello, Julia Programming Language.\n"
Julia 将 $ 之后的表达式作为将其整个值插入到字符串中的表达式。这就是我们可以使用括号将任何表达式插入字符串的原因。例如 -
julia> "100 + 10 = $(100 + 10)" "100 + 10 = 110"
现在,如果您想在字符串中使用文字 $,那么您需要使用反斜杠对其进行转义,如下所示 -
julia> print("His salary is \$5000 per month.\n") His salary is $5000 per month.
三引号字符串
我们知道我们可以创建带有三引号的字符串,如下例所示 -
julia> """See the "quote" characters""" "See the \"quote\" characters"
这种创作具有以下优点 -
三引号字符串缩进到最不想要的行的水平,因此这对于定义缩进的代码非常有用。以下是相同的示例 -
julia> str = """ This is, Julia Programming Language. """ " This is,\n Julia Programming Language.\n"
所有行中最长的常见空格或制表符起始序列称为缩进级别,但它不包括以下内容 -
“””后面的一行
仅包含空格或制表符的行
julia> """ This is Julia Programming Language""" " This\nis\n Julia Programming Language"
常见的字符串操作
使用 Julia 提供的字符串运算符,我们可以比较两个字符串,搜索特定字符串是否包含给定的子字符串,以及连接/连接两个字符串。
标准比较运算符
通过使用以下标准比较运算符,我们可以按字典顺序比较字符串 -
julia> "abababab" < "Tutorialspoint" false julia> "abababab" > "Tutorialspoint" true julia> "abababab" == "Tutorialspoint" false julia> "abababab" != "Tutorialspoint" true julia> "100 + 10 = 110" == "100 + 10 = $(100 + 10)" true
搜索运算符
Julia 为我们提供了findfirst和findlast函数来搜索字符串中特定字符的索引。您可以检查以下这两个函数的示例 -
julia> findfirst(isequal('o'), "Tutorialspoint") 4 julia> findlast(isequal('o'), "Tutorialspoint") 11
Julia 还为我们提供了findnext和findprev函数来开始搜索给定偏移处的字符。检查以下这两个函数的示例 -
julia> findnext(isequal('o'), "Tutorialspoint", 1) 4 julia> findnext(isequal('o'), "Tutorialspoint", 5) 11 julia> findprev(isequal('o'), "Tutorialspoint", 5) 4
还可以检查是否在字符串中找到子字符串。我们可以使用genesisin函数来实现这一点。下面给出了示例 -
julia> occursin("Julia", "This is, Julia Programming.") true julia> occursin("T", "Tutorialspoint") true julia> occursin("Z", "Tutorialspoint") false
Repeat() 和 join() 函数
从 Julia 中的字符串的角度来看,repeat 和 join 是两个有用的函数。下面的例子解释了它们的用途 -
julia> repeat("Tutorialspoint.com ", 5) "Tutorialspoint.com Tutorialspoint.com Tutorialspoint.com Tutorialspoint.com Tutorialspoint.com " julia> join(["TutorialsPoint","com"], " . ") "TutorialsPoint . com"
非标准字符串文字
文字是一个字符或一组字符,用于存储变量。
原始字符串文字
原始字符串文字是另一种有用的非标准字符串文字。它们无需插值或转义即可以原始“...”的形式表达。它们创建普通的 String 对象,其中包含与输入相同的封闭内容,无需插值或转义。
例子
julia> println(raw"\\ \\\"") \\ \"
字节数组文字
字节数组文字是最有用的非标准字符串文字之一。它有以下规则 -
ASCII 字符以及转义字符将生成一个字节。
八进制转义序列以及 \x 将生成与转义值相对应的字节。
Unicode 转义序列将产生字节编码序列。
所有这三个规则在某种意义上都是重叠的。
例子
julia> b"DATA\xff\u2200" 8-element Base.CodeUnits{UInt8,String}: 0x44 0x41 0x54 0x41 0xff 0xe2 0x88 0x80
上面生成的字节数组不是有效的 UTF-8 字符串,如下所示 -
julia> isvalid("DATA\xff\u2200") false
版本号文字
版本号文字是另一种有用的非标准字符串文字。它们可以是v “…”的形式。VNL创建对象即VersionNumber。这些对象遵循语义版本控制的规范。
例子
我们可以使用以下语句来定义版本特定的Behave -
julia> if v"1.0" <= VERSION < v"0.9-" # you need to do something specific to 1.0 release series end
常用表达
Julia 具有与 Perl 兼容的正则表达式,它们通过以下方式与字符串相关 -
RE 用于查找字符串中的规则模式。
RE 本身作为字符串输入。它被解析为一个状态机,然后可以有效地使用该状态机来搜索字符串中的模式。
例子
julia> r"^\s*(?:#|$)" r"^\s*(?:#|$)" julia> typeof(ans) Regex
我们可以使用如下方法来检查正则表达式是否与字符串匹配 -
julia> occursin(r"^\s*(?:#|$)", "not a comment") false julia> occursin(r"^\s*(?:#|$)", "# a comment") true