logo

juliaの文字列に関する文法と関数のまとめ 📂ジュリア

juliaの文字列に関する文法と関数のまとめ

概要

ジュリアで用いる文字/文字列に関する構文および関数を簡潔に整理する。基準はジュリアバージョンv1.11.5である。

公式ドキュメント

要約

  • 定義
    • '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
```