文字と文字列
Julia には文字型(Char)と文字列型(String)がある。
文字はシングルクォート ' ' で囲む。
julia> 'a'
'a': ASCII/Unicode U+0061 (category Ll: Letter, lowercase)
julia> typeof('a')
Char
文字列はダブルクォート " " で囲む。
julia> "abc"
"abc"
julia> typeof("abc")
String
ダブルクォートで囲めば1文字でも文字列型だが、2文字以上をシングルクォートで囲むとエラーになる。
julia> "a"
"a"
julia> 'abc'
ERROR: ParseError:
# Error @ REPL[4]:1:2
'abc'
#└─┘ ── character literal contains multiple characters
Stacktrace:
[1] top-level scope
文字列の連結は * 演算子。
julia> "abc" * "def"
"abcdef"
文字列同士だけじゃなく、文字同士、あるいは文字と文字列の連結もできる。結果はもちろん文字列。
julia> 'a' * 'b'
"ab"
julia> "ab" * 'c'
"abc"
julia> 'a' * "bc"
"abc"
文字列連結の演算子が * というのは初めて見た。
文字列の各文字にアクセスするには、次のように位置インデックスを指定すればいい。ただし、Julia ではインデックスは 1 から始まる。
julia> "abc"[1]
'a': ASCII/Unicode U+0061 (category Ll: Letter, lowercase)
julia> "abc"[3]
'c': ASCII/Unicode U+0063 (category Ll: Letter, lowercase)
範囲から外れたインデックスを指定すると、当然エラー。
julia> "abc"[0]
ERROR: BoundsError: attempt to access 3-codeunit String at index [0]
Stacktrace:
[1] checkbounds
@ .\strings\basic.jl:217 [inlined]
[2] codeunit
@ .\strings\string.jl:139 [inlined]
[3] getindex(s::String, i::Int64)
@ Base .\strings\string.jl:462
[4] top-level scope
インデックスが 1 始まりなのは、科学計算用言語として FORTRAN を意識したのかな?
