目錄
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