Julia言語の文字列

Julia言語で文字列を操作する方法をご紹介します。

リテラル

Julia言語で文字列リテラルを表すには、文字列を2重引用符で囲む。

str = "hello, world"

2重引用符を含む文字列の場合は、文字列を3つの2重引用符で囲む。

str = """Say "hello, world"."""

表示

Juliaで文字列を表示するには、printlnを使用する。

julia> println("hello, World")
hello, world

配列

文字列を格納した変数や文字列リテラルは、配列として使うことができる。他の多くのプログラミング言語では配列の添字は0から始まるが、Juliaでは配列の添字は1から始まる。

julia> "abc"[1]
'a': ASCII/Unicode U+0061 (category Ll: Letter, lowercase)

julia> "abc"[2]
'b': ASCII/Unicode U+0062 (category Ll: Letter, lowercase)

全角文字の場合はバイトサイズに注意する。

julia> "いろは"[1]
'い': Unicode U+3044 (category Lo: Letter, other)

julia> "いろは"[2]
ERROR: StringIndexError: invalid index [2], valid nearby indices [1]=>'い', [4]=>'ろ'
Stacktrace:
 [1] string_index_err(s::String, i::Int64)
   @ Base .\strings\string.jl:12
 [2] getindex_continued(s::String, i::Int64, u::UInt32)
   @ Base .\strings\string.jl:248
 [3] getindex(s::String, i::Int64)
   @ Base .\strings\string.jl:241
 [4] top-level scope
   @ REPL[13]:1

julia> "いろは"[4]
'ろ': Unicode U+308D (category Lo: Letter, other)

最後の要素

文字列の最後の文字を参照するには、配列の特殊な添字「end」を使う。

julia> "abc"[end]
'c': ASCII/Unicode U+0063 (category Ll: Letter, lowercase)

範囲指定

配列の添字は範囲指定することもできる。たとえば2文字目から4文字目までの場合は次のようにする。

julia> "example"[2:6]
"xampl"

結合

Juliaで複数の文字列を結合するには、2通りのやり方がある。

関数で文字列を結合する

string関数は、渡されたすべての引数を連結した文字列を返す。引数に文字列以外の数値などを渡しても、キャスト(型変換)される。

julia> url = string("https:", "//segakuin.com", "/julia")
"https://segakuin.com/julia"

演算子で文字列を結合する

*」は文字列を結合する演算子である。オペランド(被演算子)に文字列以外を指定することはできない。

julia> url = "https:" * "//segakuin.com" * "/julia"
"https://segakuin.com/julia"

*演算子を使うとプログラムコードがすっきりして見やすくなるが、文字列以外は明示的にキャスト(型変換)する必要があることに注意する。

置換

Julia言語で文字列を置き換えるには、replace関数を使う

julia> s = replace("hello, world", "world" => "japan")
"hello, japan"

長さ

Julia言語で文字列の長さを取得するには、length関数を用いる。

julia> l = length("hello, world")
12

繰返し

文字列を繰り返して新たな文字列を作成するには、^ 演算子を使う。

julia> s = "hello" ^ 2
"hellohello"

julia> s = "hello" ^ 3
"hellohellohello"

数値から文字列への変換

数値を文字列に変換するには、Base.string 関数を使う。

julia> s = string(15)
"15"

基数を指定することもできる。

julia> s = string(15, base = 2)
"1111"

julia> s = string(15, base = 16)
"f"

桁数を指定して、0埋め(パディング)することもできる。

julia> s = string(15, pad = 4)
"0015"

julia> s = string(15, base = 2, pad = 8)
"00001111"

文字列から部分文字列を取り出す

文字列から部分文字列を取り出すには、Base.SubString 関数を使う。

SubString(string, start)
SubString(string, start, end)
SubString(string, range)

以下に示す引数を SubString 関数に指定できる。

start
先頭の位置を1から始まる数値で指定する。
julia> s = SubString("hello, world", 2)
"ello, world"
end
終点の位置を1から始まる数値で指定する。
julia> s = SubString("hello, world", 2, 5)
"ello"
range
範囲を指定する。
julia> s = SubString("hello, world", 2:5)
"ello"

文字列の先頭を空白で埋める

指定した文字数になるまで左側(先頭)を空白で埋めるには、Base.lpad 関数を使う。

julia> s = lpad("hello, world", 16)
"    hello, world"

文字列の末尾を空白で埋める

指定した文字数になるまで右側(末尾)を空白で埋めるには、Base.rpad 関数を使う。

julia> s = rpad("hello, world", 16)
"hello, world    "

文字列の並びを逆転させる

文字列の並びを逆転させるには、Base.reverse 関数を使う。

julia> s = reverse("hello, world")
"dlrow ,olleh"

文字列の分割

指定した文字で文字列を分割するには、Base.split 関数を使う。

julia> a = split("hello, world", ",")
2-element Vector{SubString{String}}:
"hello"
" world"

julia> a[1]
"hello"

julia> a[2]
" world"

文字列の先頭と末尾から不要な文字を取り除く

文字列の左右(先頭と末尾)から不要な文字を取り除くには、Base.strip 関数を使う。

julia> s = strip("  hello, world  ", ' ')
"hello, world"

取り除く文字を複数指定することができる。

julia> s = strip("(hello, world)", ['(', ')'])
"hello, world"

他のプログラミング言語には左右の空白を取り除く trim という関数が用意されていることがあるが、Julia言語には無い。

文字列の先頭から不要な文字を取り除く

文字列の左(先頭)から不要な文字を取り除くには、Base.lstrip 関数を使う。

julia> s = lstrip("  hello, world  ", ' ')
"hello, world  "

他のプログラミング言語には左側の空白を取り除く ltrim という関数が用意されていることがあるが、Julia言語には無い。

文字列の末尾から不要な文字を取り除く

文字列の右(末尾)から不要な文字を取り除くには、Base.rstrip 関数を使う。

julia> i = rstrip("20.315%", '%')
"20.315"

他のプログラミング言語には右側の空白を取り除く rtrim という関数が用意されていることがあるが、Julia言語には無い。

文字列の後方一致

Base.endswith 関数を使って、指定した文字列で終わるかどうかを確認できる。

julia> endswith("Julia", "ia")
true

julia> endswith("Julia", "IA")
false

文字列の前方一致

Base.startswith 関数を使って、指定した文字列で始まるかどうかを確認できる。

julia> startswith("Julia", "Ju")
true

julia> startswith("Julia", "JU")
false

参考文献

JuliaLang.org contributors (2021) Julia Documentation