Skip to content

Julia 字符串

Julia 提供了强大的字符串处理功能,支持 Unicode 和多种字符串操作。

字符串基础

创建字符串

julia
# 双引号创建字符串
s = "Hello, Julia!"
println(s)

# 多行字符串(三引号)
multiline = """
这是第一行
这是第二行
这是第三行
"""
println(multiline)

# 原始字符串(不转义)
raw_str = raw"C:\Users\name\Documents"
println(raw_str)  # C:\Users\name\Documents

字符与字符串

julia
# 字符用单引号
c = 'A'
println(typeof(c))  # Char

# 字符串用双引号
s = "A"
println(typeof(s))  # String

# 字符是 Unicode 代码点
println(Int('A'))   # 65
println(Char(65))   # 'A'
println('中')       # 中文字符
println(Int('中'))  # 20013

转义字符

julia
# 常用转义字符
println("换行符\n新行")
println("制表符\t缩进")
println("反斜杠\\")
println("引号\"")
println("单引号\'")

# Unicode 转义
println("\u4e2d\u6587")  # 中文
println("\U0001F600")    # 😀

字符串操作

拼接

julia
# 使用 * 拼接
s1 = "Hello"
s2 = "World"
s3 = s1 * " " * s2
println(s3)  # Hello World

# 使用 string 函数
s4 = string(s1, " ", s2)
println(s4)  # Hello World

# 使用 join
words = ["Hello", "Julia", "World"]
s5 = join(words, ", ")
println(s5)  # Hello, Julia, World

字符串插值

julia
name = "Julia"
version = 1.10

# 使用 $ 插值
println("Welcome to $name!")
println("Version: $version")

# 表达式插值用 $()
println("2 + 3 = $(2 + 3)")
println("大写: $(uppercase(name))")

# 嵌套表达式
data = [1, 2, 3]
println("Sum: $(sum(data))")

重复字符串

julia
# 使用 ^ 运算符
s = "ab" ^ 3
println(s)  # ababab

# 使用 repeat 函数
s = repeat("ab", 3)
println(s)  # ababab

长度和索引

julia
s = "Hello, Julia!"

# 长度
println(length(s))  # 13(字符数)
println(sizeof(s))  # 13(字节数,ASCII时相同)

# 索引(从1开始)
println(s[1])       # 'H'
println(s[end])     # '!'
println(s[end-1])   # 'a'

# 子字符串
println(s[1:5])     # "Hello"
println(s[8:end])   # "Julia!"

# Unicode 字符串
s_cn = "你好,世界"
println(length(s_cn))  # 5(字符数)
println(sizeof(s_cn))  # 15(字节数,UTF-8)

迭代字符串

julia
s = "Julia"

# 迭代字符
for c in s
    println(c)
end

# 带索引迭代
for (i, c) in enumerate(s)
    println("$i: $c")
end

# 收集为数组
chars = collect(s)
println(chars)  # ['J', 'u', 'l', 'i', 'a']

字符串函数

大小写转换

julia
s = "Hello, Julia!"

println(uppercase(s))   # HELLO, JULIA!
println(lowercase(s))   # hello, julia!
println(titlecase(s))   # Hello, Julia!

# 首字母大写
println(uppercasefirst("hello"))  # Hello
println(lowercasefirst("HELLO"))  # hELLO

去除空白

julia
s = "  Hello, Julia!  "

# 去除两端空白
println(strip(s))       # "Hello, Julia!"

# 去除左侧
println(lstrip(s))      # "Hello, Julia!  "

# 去除右侧
println(rstrip(s))      # "  Hello, Julia!"

# 去除指定字符
s2 = "...Hello..."
println(strip(s2, '.'))  # "Hello"

查找和替换

julia
s = "Hello, Julia! Hello, World!"

# 查找子字符串
println(findfirst("Julia", s))  # 8:12(范围)
println(findlast("Hello", s))   # 15:19
println(findall("Hello", s))    # 两个范围

# 检查包含
println(contains(s, "Julia"))    # true
println(occursin("Julia", s))    # true(参数顺序不同)

# 开头和结尾检查
println(startswith(s, "Hello"))  # true
println(endswith(s, "World!"))   # true

# 替换
println(replace(s, "Hello" => "Hi"))
# "Hi, Julia! Hi, World!"

# 只替换第一个
println(replace(s, "Hello" => "Hi", count=1))
# "Hi, Julia! Hello, World!"

分割和连接

julia
# 分割字符串
s = "apple,banana,cherry"
parts = split(s, ",")
println(parts)  # ["apple", "banana", "cherry"]

# 按空白分割
s2 = "Hello   World"
println(split(s2))  # ["Hello", "World"]

# 限制分割次数
println(split(s, ",", limit=2))  # ["apple", "banana,cherry"]

# 连接字符串
parts = ["apple", "banana", "cherry"]
println(join(parts, ", "))  # "apple, banana, cherry"
println(join(parts, " & "))  # "apple & banana & cherry"

字符操作

julia
# 字符分类
println(isdigit('5'))     # true
println(isletter('A'))    # true
println(isspace(' '))     # true
println(ispunct('.'))     # true
println(isuppercase('A')) # true
println(islowercase('a')) # true

# 字符串分类
println(isascii("Hello"))     # true
println(isascii("你好"))      # false
println(isnumeric("123"))     # 检查每个字符

填充和对齐

julia
# 填充
println(lpad("42", 5, '0'))   # "00042"
println(rpad("Hello", 10))    # "Hello     "

# 指定填充字符
println(lpad("test", 10, '-'))  # "------test"
println(rpad("test", 10, '-'))  # "test------"

字符串比较

julia
s1 = "apple"
s2 = "banana"
s3 = "Apple"

# 相等比较
println(s1 == "apple")   # true

# 大小比较(字典序)
println(s1 < s2)         # true

# 忽略大小写比较
println(lowercase(s1) == lowercase(s3))  # true

# cmp 函数
println(cmp("a", "b"))   # -1
println(cmp("b", "a"))   # 1
println(cmp("a", "a"))   # 0

字符串构建

使用 IOBuffer

对于大量字符串拼接,使用 IOBuffer 更高效:

julia
io = IOBuffer()

for i in 1:5
    print(io, "Item $i, ")
end

result = String(take!(io))
println(result)  # "Item 1, Item 2, Item 3, Item 4, Item 5, "

使用 sprint

julia
# sprint 捕获输出为字符串
s = sprint() do io
    println(io, "Line 1")
    println(io, "Line 2")
    print(io, "Line 3")
end
println(s)

格式化输出

@sprintf 宏

julia
using Printf

# 格式化字符串
s = @sprintf("整数: %d, 浮点: %.2f, 字符串: %s", 42, 3.14159, "hello")
println(s)

# 常用格式说明符
@printf("%d\n", 42)        # 整数
@printf("%f\n", 3.14)      # 浮点数
@printf("%.2f\n", 3.14159) # 2位小数
@printf("%e\n", 12345.0)   # 科学计数法
@printf("%s\n", "hello")   # 字符串
@printf("%c\n", 'A')       # 字符
@printf("%x\n", 255)       # 十六进制: ff
@printf("%o\n", 64)        # 八进制: 100
@printf("%b\n", 10)        # 二进制: 1010

# 宽度和对齐
@printf("%10d\n", 42)      # 右对齐,宽度10
@printf("%-10d\n", 42)     # 左对齐
@printf("%010d\n", 42)     # 补零

Unicode 支持

julia
# Julia 原生支持 Unicode
s = "你好,世界!"
println(s)
println(length(s))  # 6 个字符

# Unicode 标识符
α = 0.5
β = 1.5
结果 = α + β
println(结果)  # 2.0

# 字符串标准化
using Unicode
s1 = "café"
println(normalize(s1, :NFC))  # 规范化

子字符串类型

julia
s = "Hello, Julia!"

# SubString 是字符串的视图,不复制
sub = SubString(s, 1, 5)
println(sub)         # "Hello"
println(typeof(sub)) # SubString{String}

# 转换为 String
str = String(sub)
println(typeof(str)) # String

实用示例

解析 CSV 行

julia
function parse_csv_line(line)
    fields = split(line, ",")
    return strip.(fields)  # 去除每个字段的空白
end

line = "  apple , banana ,  cherry  "
println(parse_csv_line(line))  # ["apple", "banana", "cherry"]

模板字符串

julia
function render_template(template, data)
    result = template
    for (key, value) in data
        result = replace(result, "{$key}" => string(value))
    end
    return result
end

template = "Hello, {name}! You have {count} messages."
data = Dict("name" => "Alice", "count" => 5)
println(render_template(template, data))
# "Hello, Alice! You have 5 messages."

单词计数

julia
function word_count(text)
    words = split(lowercase(text))
    counts = Dict{String, Int}()
    for word in words
        w = strip(word, ['.', ',', '!', '?'])
        counts[w] = get(counts, w, 0) + 1
    end
    return counts
end

text = "Hello world! Hello Julia. Julia is great!"
println(word_count(text))

下一步

学习完字符串后,请继续学习:

本站内容仅供学习和研究使用。