文本是您在几乎所有编程任务中都会用到的基本数据类型,从向用户显示消息、处理文本文件到处理来自网络服务的数据。文本数据在 Julia 中主要通过字符和字符串来处理。提供这些类型的创建和操作的指导。字符:构成单元字符,在 Julia 中由 Char 类型表示,是单个字母、符号、数字或任何其他 Unicode 字符。您可以通过用单引号将字符括起来来定义它。julia> c1 = 'A' 'A': ASCII/Unicode U+0041 (类别 Lu: 字母,大写) julia> c2 = 'π' 'π': Unicode U+03C0 (类别 Lm: 字母,修饰符) julia> c3 = '7' '7': ASCII/Unicode U+0037 (类别 Nd: 数字,十进制数字)Julia 中的每个 Char 都表示一个 Unicode 码点。这意味着 Julia 可以处理来自不同语言和符号集的各种字符。您甚至可以获取字符的整数表示:julia> Int('A') 65 julia> Int('α') 945字符是构成字符串的基本单位。字符串:字符序列字符串,在 Julia 中是 String 类型,是一个有序的字符序列。字符串通过用双引号 " 或三引号 """ 括起来定义。julia> greeting = "Hello, Julia!" "Hello, Julia!" julia> fact = "Julia is a high-performance language." "Julia is a high-performance language."Julia 字符串默认采用 UTF-8 编码,这是一种常见且高效的 Unicode 字符存储方式。Julia 字符串的一个重要特性是它们是不可变的。这意味着一旦字符串创建,其内容不能直接更改。看起来修改字符串的操作实际上是创建了一个带有修改内容的新字符串。组合字符串:连接您经常需要组合字符串。这个过程称为连接。Julia 提供了几种直接的方法来完成此操作。* 运算符通常用于数字乘法,但也可用于字符串连接:julia> first_name = "Ada" "Ada" julia> last_name = "Lovelace" "Lovelace" julia> full_name = first_name * " " * last_name "Ada Lovelace"另外,您可以使用 string() 函数。当您想组合多个项(包括非字符串值,它会尝试将其转换为字符串)时,此函数特别有用:julia> language = "Julia" "Julia" julia> version = 1.10 1.10 julia> message = string(language, " version ", version) "Julia version 1.10"两种方法都会生成一个新字符串,保持原始字符串不变,这与字符串的不可变性保持一致。digraph G { rankdir=TB; node [shape=record, style=filled, color="#adb5bd", fillcolor="#e9ecef"]; edge [color="#495057"]; s1 [label="s1 | \"Hello\""]; s2 [label="s2 | \" Julia\""]; s3 [label="s3 | \"Hello Julia\"", fillcolor="#96f2d7"]; op [label="*", shape=circle, style=filled, fillcolor="#fab005", fontcolor="white"]; s1 -> op [dir=none]; s2 -> op [dir=none]; op -> s3; }使用 * 运算符进行字符串连接会根据操作数创建新字符串。s1 和 s2 保持不变。在字符串中嵌入值:插值字符串插值是一种便捷方式,用于将变量或表达式的值直接插入到字符串中。在 Julia 中,您使用 $ 符号来完成此操作。要嵌入变量的值,请在变量名前面加上 $:julia> name = "World" "World" julia> salutation = "Hello, $name!" "Hello, World!"如果您需要嵌入表达式的结果,请在 $ 后面用括号将表达式括起来:5 julia> y = 10 10 julia> calculation = "The sum of $x and $y is $(x + y)." "The sum of 5 and 10 is 15."插值通常会使代码更具可读性,而不是重复的连接操作,特别是对于复杂的字符串。访问字符串内容和属性您经常需要知道字符串的长度,或访问其特定字符或部分。长度:length() 函数返回字符串中的字符数量。julia> s = "Julia" "Julia" julia> length(s) 5 julia> unicode_str = "你好世界" # “你好世界”的中文表示 "你好世界" julia> length(unicode_str) 4 请注意 length() 如何正确计算字符数量,即使是可能占用多个字节存储的 Unicode 字符也是如此。索引:您可以使用索引(位置)访问字符串中的单个字符。Julia 使用 1-基于索引,这意味着第一个字符的索引是 1。julia> s = "Julia" "Julia" julia> s[1] # 第一个字符 'J': ASCII/Unicode U+004A (类别 Lu: 字母,大写) julia> s[3] # 第三个字符 'l': ASCII/Unicode U+006C (类别 Ll: 字母,小写) julia> s[end] # 最后一个字符(使用 'end' 关键字) 'a': ASCII/Unicode U+0061 (类别 Ll: 字母,小写)尝试访问有效范围之外的索引(例如,对于 "Julia",s[0] 或 s[6])将导致错误。切片(子字符串):您可以使用索引范围提取字符串的一部分,称为子字符串。这也会创建一个新字符串。julia> s = "Programming" "Programming" julia> s[1:4] # 从索引 1 到 4 的字符 "Prog" julia> s[8:end] # 从索引 8 到末尾的字符 "ming" julia> s[5:7] "ram"常用字符串函数Julia 提供了一套丰富的内置函数用于字符串操作。以下是一些最常用的一些:检查子字符串:occursin(substring, string): 如果在 string 中找到 substring,则返回 true,否则返回 false。julia> message = "Hello, Julia programmers!" "Hello, Julia programmers!" julia> occursin("Julia", message) true julia> occursin("Python", message) falsestartswith(string, prefix): 检查 string 是否以 prefix 开头。endswith(string, suffix): 检查 string 是否以 suffix 结尾。julia> filename = "script.jl" "script.jl" julia> startswith(filename, "script") true julia> endswith(filename, ".jl") true替换子字符串:replace(string, pattern => replacement): 创建一个新字符串,其中 pattern 的出现被 replacement 替换。julia> s = "I like apples." "I like apples." julia> replace(s, "apples" => "bananas") "I like bananas." julia> s # 原始字符串未改变 "I like apples."更改大小写:uppercase(string): 将字符串转换为大写。lowercase(string): 将字符串转换为小写。titlecase(string): 将每个单词的第一个字符转换为大写。julia> phrase = "julia programming" "julia programming" julia> uppercase(phrase) "JULIA PROGRAMMING" julia> titlecase(phrase) "Julia Programming"移除空白字符:strip(string): 移除开头和结尾的空白字符。lstrip(string): 移除开头的空白字符。rstrip(string): 移除结尾的空白字符。julia> padded_text = " some data " " some data " julia> strip(padded_text) "some data"字符串的分割与连接:split(string, delimiter): 根据 delimiter 将 string 分割成子字符串的集合(一个数组)。julia> csv_line = "apple,banana,cherry" "apple,banana,cherry" julia> fruits = split(csv_line, ',') 3-element Vector{String}: "apple" "banana" "cherry"数组是多功能的集合,我们将在第 4 章中详细介绍。join(collection, delimiter): 将 collection(例如,字符串数组)的元素连接成一个字符串,并在元素之间插入 delimiter。julia> words = ["Coding", "in", "Julia"] 3-element Vector{String}: "Coding" "in" "Julia" julia> sentence = join(words, " ") "Coding in Julia"多行字符串对于跨越多行的文本,例如诗歌、长消息或嵌入的代码片段,Julia 允许您使用三引号 """..."""。julia> multi_line_str = """ This is a string that spans multiple lines. Indentation is also preserved if intended. """ "This is a string\nthat spans multiple\nlines.\nIndentation is also preserved\n if intended.\n"Julia 在处理三引号字符串的缩进方面很智能。如果起始的 """ 独自在一行,并且字符串内容从下一行开始,Julia 可以选择性地去除所有内容行共有的前导空白字符,这基于缩进最少且非空白行的缩进。这有助于保持代码整洁。为了精确控制,您可以确保内容与起始 """ 在同一行,或明确管理缩进。Julia 对 Unicode 的支持值得重申的是,Julia 能可靠地处理 Unicode 字符和字符串。无论您使用英语、中文、希腊语、表情符号还是数学符号,字符和字符串通常会如您预期那样运行。像 length()、索引和迭代这样的函数在字符级别而非字节级别上正常运行。julia> mixed_string = "Hello Γειά 你好 👋" "Hello Γειά 你好 👋" julia> length(mixed_string) 18 julia> for char in mixed_string print(char, " ") end H e l l o Γ ε ι ά 你 好 👋这种内置能力使 Julia 成为涉及国际文本或特殊符号应用的理想选择。处理字符和字符串是编程中的日常活动。掌握这些基础知识将使您能够处理文本信息,创建有用的输出,并构建更具交互性和实用性的 Julia 程序。随着学习的深入,您会发现更多强大的工具和包,用于 Julia 生态系统中的高级文本处理。