Julia简易教程——4_字符串操作

时间:2022-07-24
本文章向大家介绍Julia简易教程——4_字符串操作,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

0. 前言

在Python中,字符串和字符均可使用双引号" "或者是单引号' ', 但是在 Julia 中,单字符使用单引号' ' , 字符串使用" ", 回归了C中的写法, 但是如果出现引号是字符的形式,可以在最外层加上三引好""" """, 具体示例如下:

Code.0.1

julia> 'h'
'h': ASCII/Unicode U+0068 (category Ll: Letter, lowercase)

julia> "hello"
"hello"

julia> "hello julia"
"hello julia"

julia> """I say: "hello julia" """
"I say: "hello julia" "

如下写法会报错:

Code.0.2

julia> 'hello julia'
ERROR: syntax: invalid character literal

julia> """I say: "hello julia""""
ERROR: syntax: cannot juxtapose string literal

注意对比 Code.0.1 以及Code.0.2 中的最后一个例子,两个字符串的注意区别是在最后有无空格,如果字符串最后一个是引号,不加空格的话,Julia会识别成连在一起的四引号""""" ,所以会报错。

1. 字符串索引以及 AND 取子字符串

和Python一样,索引也是使用[], 但与python不同的是,julia中的索引都是从1开始的,去最后一位是用end来当作索引,为了方便学习,将使用连续数字组成字符串进行举例:

Code.1.1 普通索引

julia> my_str = "123456789."
"123456789."

julia> my_str[1]
'1': ASCII/Unicode U+0031 (category Nd: Number, decimal digit)

julia> my_str[2]
'2': ASCII/Unicode U+0032 (category Nd: Number, decimal digit)

julia> my_str[3]
'3': ASCII/Unicode U+0033 (category Nd: Number, decimal digit)

#  #######################
#  取最后一位, 用end 
#  #######################
julia> my_str[end]
'.': ASCII/Unicode U+002e (category Po: Punctuation, other)

julia> my_str[end-1]
'9': ASCII/Unicode U+0039 (category Nd: Number, decimal digit)

Code.1.2 取子串索引

julia> my_str[1:2]
"12"

julia> my_str[3:9]
"3456789"

julia> my_str[3:10]
"3456789."

julia> my_str[3:3]
"3"

注意Code.1.1Code.1.2最后一个例子,使用my_str[3]my_str[3:3] 返回的结果不一样,一个是字符还有一个是字符串。

2. 字符串拼接

julia 中不支持使用 + 来进行字符串拼接,会报错,如下例所示: Code.2.1 拼接错误示例

julia> "hello" + "world"
ERROR: MethodError: no method matching +(::String, ::String)
Closest candidates are:
  +(::Any, ::Any, ::Any, ::Any...) at operators.jl:502
Stacktrace:
 [1] top-level scope at none:0

Julia中提供了一个奇怪的字符串拼接符号,那就是*, 也可以使用string(<str1>, <str2>, ...)方法, 如下示例:

Code.2.2 字符串拼接

julia> string("Hello", " Julia", " ! ")
"Hello Julia ! "

julia> "hello" * " julia" * " !"
"hello julia !"

julia> str1 = "hello"
"hello"

julia> str2 = "julia"
"julia"

julia> string(str1, " ", str2, " !")
"hello julia !"

julia> str1 * " " * str2 * " !"
"hello julia !"

3. 插值操作

为了减少字符串拼接的冗余操作,julia 提供了一种类似于shell、perl 等中的使用$插值操作,不仅可以进行字符串赋值,还可以进行运算赋值,示例如下: Code.3.1 插值操作

julia> str1 = "hello"
"hello"

julia> str2 = "julia"
"julia"

julia> "I say: $str1 $str2 !"
"I say: hello julia !"

julia> "3 + 3 = $(3 + 3)"
"3 + 3 = 6"

4. 其他常用操作

Julia中还支持字符串索引搜索, 判断两个字符串的包含关系等

4.1. 索引搜索

索引搜索使用findfirst(<func()>, <str>), 其中func() 指的是一种方法,一般为isequal() 等,str指的是目标字符串,示例如下: Code.4.1 索引搜索

julia> findfirst(isequal('x'), "xyz123")
1

julia> findfirst(isequal('y'), "xyz123")
2

julia> findfirst(isequal('q'), "xyz123")

Code.4.2 索引偏移量搜索 还可以加上偏移量,使用findnext(<func()>, <str>, <index bais>) 进行查找,findfirst(<func()>, <str>)默认是从字符串首进行查找,findnext(<func()>, <str>, <index bais>)是从偏移量位置往后进行查找,示例如下:

julia> findnext(isequal('y'), "xyz123", 1)
2

julia> findnext(isequal('z'), "xyz123z", 5)
7

julia> findnext(isequal('o'), "xyz123z", 8)

4.2. 字符串包含判断

可以用 occursin 函数检查在字符串中某子字符串可否找到,示例如下: Code.4.3 occursin包含判断

julia> occursin("world", "Hello, julia.")
true

julia> occursin("o", "Hello, julia.")
true

julia> occursin("p", "Hello, julia.")
false