文字と文字列

2026年3月12日
1 分

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 を意識したのかな?