Julia - 字符串
字符串可以定义为一个或多个字符的有限序列。 它们通常用双引号引起来。 例如:"这是 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
还可以检查是否在字符串中找到子字符串。 我们可以使用 occurrin 函数来实现这一点。 下面给出示例 −
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"
非标准字符串文字
文字是一个字符或一组字符,用于存储变量。
原始字符串文字
原始字符串文字是另一种有用的非标准字符串文字。 它们无需插值或转义即可以 raw"..." 的形式表示。 它们创建普通的 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。 这些对象遵循语义版本控制的规范。
示例
我们可以使用以下语句来定义版本特定的行为 −
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
我们可以使用 occurrin 来检查正则表达式是否与字符串匹配 −
julia> occursin(r"^\s*(?:#|$)", "not a comment") false julia> occursin(r"^\s*(?:#|$)", "# a comment") true