目录
1、字符类型String的一些特点
Julia Strings 有几个值得注意的高级特征:
- Julia 中用于字符串(和字符串文字)的内置具体类型是
String
。 它支持全部 Unicode 字符 通过 UTF-8 编码。(transcode
函数是 提供 Unicode 编码和其他编码转换的函数。) - 所有的字符串类型都是抽象类型
AbstractString
的子类型,而一些外部包定义了别的AbstractString
子类型(例如为其它的编码定义的子类型)。若要定义需要字符串参数的函数,你应当声明此类型为AbstractString
来让这函数接受任何字符串类型。 - 类似 C 和 Java,但是和大多数动态语言不同的是,Julia 有优秀的表示单字符的类型,即
AbstractChar
。Char
是AbstractChar
的内置子类型,它能表示任何 Unicode 字符的 32 位原始类型(基于 UTF-8 编码)。 - 如 Java 中那样,字符串不可改——任何
AbstractString
对象的值不可改变。 若要构造不同的字符串值,应当从其它字符串的部分构造一个新的字符串。 - 从概念上讲,字符串是从索引到字符的部分函数:对于某些索引值,它不返回字符值,而是引发异常。这允许通过编码表示形式的字节索引来实现高效的字符串索引,而不是通过字符索引——它不能简单高效地实现可变宽度的 Unicode 字符串编码。
2、常用操作
2.1 char
#类型
typeof('s')
#对应的Unicode编码值
Int('x')
#Unicode编码值转字符
Char(120)
#检查是否是一个有效Unicode编码值
isvalid(Char, 0x110000)
#\u您可以在单引号中输入任何Unicode字符,输入方式为:u后跟最多四个十六进制数字,或u后跟最多八个十六进制数字(最长的有效值只需要六个):
'\u78'
#字符之间可以比较
'A' < 'a'
2.2 String的基本操作
#String的基本操作
#字符串索引
str="Hello, world.\n"
#使用小于 1 或大于 `end` 的索引都是错误的
str[0]
str[end+1]
#BoundsError: attempt to access "Hello, world.\n"
# at index [0]
#下面两个表达式的值是不同的,一个是Char,另一个是String
str[6]
str[6:6]
#Unicode 和 UTF-8
#这里需要注意一个事情:在这种情况下,字符∀是一个三字节字符,因此索引2和3无效,下一个字符的索引是4
s = "\u2200 x \u2203 y"
s[1]
s[2]
#StringIndexError("∀ x ∃ y", 2)
#string_index_err(::String, ::Int64) at string.jl:12
s[4]
#值为' ': ASCII/Unicode U+0020 (category Zs: Separator, space)
#可以使用nextind函数返回下一个字符串索引值
nextind(s,1)
#返回值为:4
#因此length(s)长度和 最大的索引值 可能是不一样的。
length(s)
endof(s)
length(s) <= endof(s)
for c in s
println(c)
end
2.3 String字符串拼接
greet = "Hello"
whom = "world"
#使用String函数拼接
string(greet, ", ", whom, ".\n")
#也可以通过 * 号操作符拼接
greet * ", " * whom * ".\n"
# "Hello, world.\n"
2.4 插值
#插值类型 ,在字符串中 使用 $符号 获取属性值
"$greet, $whom.\n"
"1 + 2 = $(1 + 2)"
c = 'x'
"hi, $c"
2.5常见操作
#三引号字符串文本,如果三引号范围有换行,也会一并带到输出中的
str = """ Hello, world. """
# Hello, world.
str = """
Hello,
world.
"""
# " Hello,\n world.\n"
#常见操作
#字符串比较
"abracadabra" < "xylophone"
"abracadabra" == "xylophone"
"Hello, world." != "Goodbye, world."
"1 + 2 = 3" == "1 + 2 = $(1 + 2)"
#字符串查找
findfirst(isequal('o'), "xylophone")
findnext(isequal('o'), "xylophone", 5)
findlast(isequal('o'), "xylophone")
contains("Hello, world.", "world")
repeat(".:Z:.", 10)
endswith("xylophone", 'e')
startswith("xylophone", 'x')
length("xylophone")
nextind("xylophone",1)
2.6 正则表达式
#正则表达式
#Julia有类似Perl的正则表达式
#在Julia中,正则表达式使用以r开头的各种标识符作为前缀的非标准字符串文本作为输入
#如果匹配成功返回的是一个RegexMatch()对象,如果匹配不成功返回nothing
r"^\s*(?:#|$)"
m = match(r"^\s*(?:#|$)", "not a comment")
#nothing
m = match(r"[0-9]","aaaa1aaaa2aaaa3",11)
#RegexMatch("1")
m = match(r"(a|b)(c)?(d)", "acd")
2.7 其他一些操作
中文版见:https://docs.juliacn.com/latest/manual/strings/#man-concatenation-1
英文版见:https://julia-doc.readthedocs.io/en/latest/manual/strings/#strings