juliaの文字列に関する文法と関数のまとめ
概要
ジュリアで用いる文字/文字列に関する構文および関数を簡潔に整理する。基準はジュリアバージョンv1.11.5である。
公式ドキュメント
- Manual>Strings: https://docs.julialang.org/en/v1/manual/strings/
- Base>Strings: https://docs.julialang.org/en/v1/base/strings/
要約
- 定義
'x'
"x"
repr(foo)
Char(decimal)
Char(hex)
- 演算
"foo" < "bar"
"foo" > "bar"
"foo" == "bar"
"foo" != "bar"
isless("foo", "bar")
- 判別
isspace(' ')
isletter('x')
isuppercase('X')
islowercase('x')
isdigit('1')
isxdigit('x')
isnumeric('1')
ispunct('!')
isascii("foo")
iscntrl('x')
isprint('x')
- 一般
length("foo bar")
sizeof("foo bar")
"foo bar"[1]
"foo bar"[1:3]
first("foo bar", n)
last("foo bar", n)
"foo" * "bar"
=string("foo", "bar")
"foo"^n
=repeat("foo", n)
join(["foo1", "foo2"], "bar")
split("foo bar", " ")
"foo $bar"
- 変換
replace("foo bar", "o"=>"x")
reverse("foo bar")
lowercase("FOO BAR")
lowercasefirst("FOO BAR")
uppercase("foo bar")
uppercasefirst("foo bar")
titlecase("foo bar")
- 追加/削除
chop("foo bar", head=n, tail=m)
chopprefix("foo", "bar")
chopsuffix("foo", "bar")
strip(" foo bar ")
lstrip(" foo bar ")
rstrip(" foo bar ")
lpad("foo", n)
rpad("foo", n)
filter(function, "foo bar")
- 検索
contains(haystack, needle)
occursin(needle, haystack)
startswith(haystack, needle)
endswith(haystack, needle)
findfirst("foo", "bar")
findlast("foo", "bar")
findnext("foo", "bar", n)
findprev("foo", "bar", n)
findall(function, haystack)
定義
構文 | コード |
'x' | #シングルクォート(')で文字(Char)を定義 julia> 'x' 'x': ASCII/Unicode U+0078 (category Ll: Letter, lowercase) julia> 'xx' ERROR: ParseError: julia> typeof('x') Char |
"x" | #ダブルクォート(")で文字列(String)を定義 julia> "x" "x" julia> typeof("x") String |
repr(foo) | #文字列表現を返す julia> repr(123) "123" julia> repr(zeros(3)) "[0.0, 0.0, 0.0]" |
Char(decimal) Char(hex) | #10進数/16進数をユニコード文字に変換 julia> Char(0xAC00), Char(44032) ('가', '가') |
演算
構文 | コード |
"foo" < "bar" "foo" > "bar" | #最初の文字のユニコード大小比較 julia> Int('W'), Int('Y') (87, 89) julia> "Wonyoung" < "Yujin" true julia> "Wonyoung" > "Yujin" false |
"foo" == "bar" "foo" != "bar" | #2つの文字列の比較 julia> "Wonyoung" == "wonyoung" false julia> "Wonyoung" == "Wonyoung" true julia> "Wonyoung" != "Wonyoung" false julia> "Wonyoung" != "wonyoung" true |
isless("foo", "bar") | #"foo"がユニコードで"bar"より小さいか判定 julia> [Char('1'), Char('a'), Char('가'), Char('나')] 4-element Vector{Char}: '1': ASCII/Unicode U+0031 (category Nd: Number, decimal digit) 'a': ASCII/Unicode U+0061 (category Ll: Letter, lowercase) '가': Unicode U+AC00 (category Lo: Letter, other) '나': Unicode U+B098 (category Lo: Letter, other) julia> isless('1', 'a'), isless('a', '가'), isless('나', '가') (true, true, false) |
判別
構文 | コード |
isspace(' ') | #空白文字(スペース、改行、タブ)判定 julia> isspace(' '), isspace('\n'), isspace('\t') (true, true, true) julia> isspace('x') false |
isletter('x') | #ユニコードカテゴリ文字(Lu, Ll, Lt, Lm, Lo)判定 julia> isletter('j'), isletter('θ'), isletter('가'), isletter('あ') (true, true, true, true) julia> isletter('1'), isletter('?'), isletter('😊'), isletter(' ') (false, false, false, false) |
isuppercase('X') islowercase('x') | #大文字小文字判定 julia> isuppercase('j'), isuppercase('J') (false, true) julia> islowercase('j'), islowercase('J') (true, false) |
isdigit('1') isxdigit('x') | #10進数/16進数判定 julia> isdigit('1'), isdigit('a'), isdigit('F'), isdigit('x') (true, false, false, false) julia> isxdigit('1'), isxdigit('a'), isxdigit('F'), isxdigit('x') (true, true, true, false) |
isnumeric('1') | #ユニコードカテゴリ数字(Nd, Nl, No)判定 julia> isnumeric('1'), isnumeric('Ⅳ'), isnumeric('½'), isnumeric('௰') (true, true, true, true) julia> isnumeric('a'), isnumeric('가'), isnumeric('😊'), isnumeric('?') (false, false, false, false) |
ispunct('!') | #句読点判定 julia> ispunct('!'), ispunct('.'), ispunct('/'), ispunct('?') (true, true, true, true) julia> ispunct('1'), ispunct('x'), ispunct('가'), ispunct('😊') (false, false, false, false) |
isascii("foo") | #アスキーコード判定 julia> isascii("θ"), isascii("xθ"), isascii("123θ") (false, false, false) julia> isascii("x"), isascii("xyz"), isascii("123"), isascii("[") (true, true, true, true) |
iscntrl('x') | #制御文字判定 julia> iscntrl('x'), iscntrl('1'), iscntrl('\n'), iscntrl('\t') (false, false, true, true) |
isprint('x') | #表示可能文字判定 julia> isprint('x'), isprint('1'), isprint('\n'), isprint('\t') (true, true, false, false) |
一般
関数/構文 | コード |
length("foo bar") | #文字列の長さを返す julia> length("Jang Wonyoung") 13 |
sizeof("foo bar") | #文字列のバイトサイズを返す julia> sizeof("xyz_. ?"), length("xyz_. ?") (7, 7) julia> sizeof("αβγ"), length("αβγ") (6, 3) julia> sizeof("😊😂"), length("😊😂") (8, 2) |
"foo bar"[1] "foo bar"[1:3] | #文字列のインデックス、スライシング julia> wonyo = "Jang Wonyoung" "Jang Wonyoung" julia> wonyo[1] 'J': ASCII/Unicode U+004A (category Lu: Letter, uppercase) julia> wonyo[6:end] "Wonyoung" |
first("foo bar", n) last("foo bar", n) | #文字列の最初/最後のn文字をスライス julia> first("Jang Wonyoung", 3) "Jan" julia> last("Jang Wonyoung", 5) "young" |
"foo" * "bar" | #文字列の連結、string("foo", "bar")と同じ julia> "Jang" * "Wonyoung" "JangWonyoung" |
string("foo", "bar") | #文字列の連結、"foo" * "bar"と同じ julia> string("Jang", "Wonyoung") "JangWonyoung" |
"foo"^n | #文字列の連結を繰り返す、repeat("foo", n)と同じ julia> "Tung"^9 "TungTungTungTungTungTungTungTungTung" |
repeat("foo", n) | #文字列の連結を繰り返す、"foo"^nと同じ julia> repeat("Tung", 9) "TungTungTungTungTungTungTungTungTung" |
join(["foo1", "foo2"], "bar") | #文字列の配列を特定の区切り文字で結合 julia> join(["Jang Wonyoung", "Karina", "Sullyoon"], " and ") "Jang Wonyoung and Karina and Sullyoon" |
split("foo bar", " ") | #文字列を特定の区切り文字で分離 julia> split("Jang Wonyoung, Karina, Sullyoon", ", ") 3-element Vector{SubString{String}}: "Jang Wonyoung" "Karina" "Sullyoon" |
"foo $bar" | #文字列挿入interpolation julia> name = "Wonyoung" "Wonyoung" julia> "Jang $name" "Jang Wonyoung" julia> "1 + 2 = 3" == "1 + 2 = $(1 + 2)" true |
変換
関数 | コード |
replace("foo bar", "o"=>"x") | #文字列で特定の文字を置換 julia> replace("izone", "zon"=>"v") "ive" julia> replace("izone", "z"=>"v", "o"=>"", "n"=>"") "ive" |
reverse("foo bar") | #文字列を逆にする julia> reverse("Jang Wonyoung") "gnuoynoW gnaJ" |
lowercase("FOO BAR") | #文字列を小文字化 julia> lowercase("JANG WONYOUNG") "jang wonyoung" |
lowercasefirst("FOO BAR") | #最初の文字を小文字化 julia> lowercasefirst("JANG WONYOUNG") "jANG WONYOUNG" |
uppercase("foo bar") | #文字列を大文字化 julia> uppercase("jang wonyoung") "JANG WONYOUNG" |
uppercasefirst("foo bar") | #最初の文字を大文字化 julia> uppercasefirst("jang wonyoung") "Jang wonyoung" |
titlecase("foo bar") | #各単語の最初の文字を大文字化 julia> titlecase("jang wonyoung") "Jang Wonyoung" |
追加/削除
関数 | コード |
chop("foo bar", head=n, tail=m) | #文字列の最初からn文字、最後からm文字を削除 julia> chop("Jang Wonyoung", head=3, tail=5) "g Won" |
chopprefix("foo", "bar") chopsuffix("foo", "bar") | #"bar"で始まれば/終われば削除 julia> chopprefix.(["Jang Wonyoung", "An Yujin"], "Jang ") 2-element Vector{SubString{String}}: "Wonyoung" "An Yujin" julia> chopsuffix.(["Jang Wonyoung", "An Yujin"], "Wonyoung") 2-element Vector{SubString{String}}: "Jang " "An Yujin" |
strip(" foo bar ") | #文字列の両端の空白または特定文字を削除 julia> strip(" Julia Language ") "Julia Language" julia> strip(" Julia Language___", [' ', '_']) "Julia Language" |
lstrip(" foo bar ") rstrip(" foo bar ") | #文字列の左端/右端の空白(特定文字)を削除 julia> lstrip(" Julia Language ") "Julia Language " julia> rstrip(" Julia Language_ _ ", [' ', '_']) " Julia Language" |
lpad("foo", n) rpad("foo", n, '_') | #文字列の長さをnに伸ばし、左端/右端に空白(特定文字)を追加 julia> lpad("xyz", 10) " xyz" julia> rpad("xyz", 10, '_') "xyz_______" |
filter(function, "foo bar") | #文字列でfunctionを満たす文字だけを残す julia> filter(isuppercase, "Jang Wonyoung") "JW" julia> filter(isspace, "Jang Wonyoung") " " julia> filter(!isspace, "Jang Wonyoung") "JangWonyoung" |
検索
関数 | コード |
contains(haystack, needle) | #haystackにneedleが含まれているか確認 julia> contains("Jang Wonyoung", "y") true julia> contains("Jang Wonyoung", "x") false |
occursin(needle, haystack) | #haystackにneedleが含まれているか確認 julia> occursin("y", "Jang Wonyoung") true julia> occursin("x", "Jang Wonyoung") false |
startswith(haystack, needle) | #haystackがneedleで始まるか確認 julia> startswith("hello", "he") true |
endswith(haystack, needle) | #haystackがneedleで終わるか確認 julia> endswith("hello", "lo") true |
findfirst("foo", "bar") | #文字列で特定の文字の位置を探す (左側基準) julia> findfirst('g', "Jang wonyoung") 4 julia> findfirst("ng", "Jang wonyoung") 3:4 |
findlast("foo", "bar") | #文字列で特定の文字の位置を探す (右側基準) julia> findlast('g', "Jang wonyoung") 13 julia> findlast("ng", "Jang wonyoung") 12:13 |
findnext("foo", "bar", n) | #文字列で特定の文字位置を探す (n番目以降のみ探索) julia> findnext('g', "Jang wonyoung", 2) 4 julia> findnext('g', "Jang wonyoung", 6) 13 |
findprev("foo", "bar", n) | #文字列で特定の文字位置を探す (n番目以前のみ探索) julia> findprev('o', "Jang wonyoung", 13) 10 julia> findprev('o', "Jang wonyoung", 9) 7 |
findall(function, haystack) | #haystackでfunctionを満たす全インデックスを探す julia> findall(isuppercase, "Jang Wonyoung") 2-element Vector{Int64}: 1 6 julia> findall(isspace, "Jang Wonyoung") 1-element Vector{Int64}: 5 julia> findall(!isspace, "Jang Wonyoung") 12-element Vector{Int64}: 1 2 3 4 6 7 8 9 10 11 12 13 |