Julia Language
文字列
サーチ…
構文
- "[string]"
- '[Unicodeスカラー値]'
- graphemes([文字列])
パラメーター
パラメータ | 詳細 |
---|---|
にとって | sprint(f, xs...) |
f | 最初の引数としてIO オブジェクトをとる関数。 |
xs | f に渡す残りの引数は0個以上です。 |
こんにちは世界!
Juliaの文字列は、 "
symbol:
julia> mystring = "Hello, World!"
"Hello, World!"
他の言語とは異なり、 '
シンボルは代わりに使用できません 。 '
は文字リテラルを定義します。これはChar
データ型であり、単一のUnicodeスカラー値のみを格納します 。
julia> 'c'
'c'
julia> 'character'
ERROR: syntax: invalid character literal
1つの文字列からunicodeスカラー値を抽出するには、 for
ループを使って繰り返します 。
julia> for c in "Hello, World!"
println(c)
end
H
e
l
l
o
,
W
o
r
l
d
!
Graphemes
JuliaのChar
型はUnicodeのスカラー値を表しますが 、人間が「文字」として認識しているものに対応する場合もあります。たとえば、résuméのように、文字éの1つの表現は、実際には2つのUnicodeスカラー値の組み合わせです。
julia> collect("é")
2-element Array{Char,1}:
'e'
'́'
これらのコードポイントのUnicodeの説明は、「ラテン小文字E」と「複合アクセントアクセント」です。一緒に、彼らは単一の "人間"の文字を定義します。これは、Unicode用語であり、それは書面と呼ばれます。より具体的には、Unicode Annex#29は以下の理由で書記素クラスタの定義を動機づけます 。
ユーザーが「文字」(言語のための書記体系の基本単位)と考えるものは、単一のUnicodeコードポイントではないことを認識することが重要です。代わりに、その基本単位は複数のUnicodeコードポイントで構成されています。コンピュータの用語文字のあいまいさを避けるため、これはユーザが認識した文字と呼ばれます。たとえば、「G」+アクセント記号はユーザーが認識する文字です。ユーザーはそれを1文字と見なしますが、実際には2つのUnicodeコードポイントで表されます。これらのユーザが知覚する文字は、プログラム的に決定されることができる書記素クラスタと呼ばれるものによって近似される。
Juliaは文字列中の書記素クラスタを繰り返し処理する関数graphemes
提供しています。
julia> for c in graphemes("résumé")
println(c)
end
r
é
s
u
m
é
各文字を独自の行に出力した結果が、Unicodeスカラー値を反復した場合よりも優れていることに注意してください。
julia> for c in "résumé"
println(c)
end
r
e
s
u
m
e
一般的に、ユーザが知覚する文字を扱うときは、Unicodeのスカラ値よりも、書記素クラスタを扱う方が便利です。たとえば、単一の単語の長さを計算する関数を記述したいとします。ナイーブな解決策は、
julia> wordlength(word) = length(word)
wordlength (generic function with 1 method)
単語に2つ以上のコードポイントで構成される書記素クラスタが含まれている場合、その結果は直感的ではありません。
julia> wordlength("résumé")
8
graphemes
関数を使用してより正確な定義を使用すると、期待される結果が得られます。
julia> wordlength(word) = length(graphemes(word))
wordlength (generic function with 1 method)
julia> wordlength("résumé")
6
数値型を文字列に変換する
Juliaの数値型を文字列に変換する方法は数多くあります。
julia> a = 123
123
julia> string(a)
"123"
julia> println(a)
123
string()
関数はさらに引数を取ることができます:
julia> string(a, "b")
"123b"
$
を使用して、文字列に整数(およびある種の他の型)を挿入(別名補間)することもできます:
julia> MyString = "my integer is $a"
"my integer is 123"
パフォーマンスのヒント:上記の方法は、時には非常に便利です。しかし、多くの多くの操作を実行し、コードの実行速度が懸念される場合は、Julia パフォーマンスガイドではこれに反対し、代わりに以下の方法を推奨します。
print()
とprintln()
に対して複数の引数を指定することができます。これらの引数は、 string()
が複数の引数で動作するのとまったく同じです。
julia> println(a, "b")
123b
または、ファイルに書き込むときに、同様に使用することができます。
open("/path/to/MyFile.txt", "w") do file
println(file, a, "b", 13)
end
または
file = open("/path/to/MyFile.txt", "a")
println(file, a, "b", 13)
close(file)
これは、指定された部分から文字列を作成してから(コンソール表示またはファイルに出力する)必要がなくなり、代わりにさまざまな部分をただちに出力するため、処理が高速になります。
クレジット:SOの質問に基づいた回答JuliaのIntをStringに変換する最良の方法は何ですか? Michael Ohlroggeの回答とFengyang Wangの入力
文字列補間(文字列に変数で定義された値を挿入)
Juliaでは、他の多くの言語と同様に、変数で定義された値を文字列に挿入することで補間することができます。簡単な例:
n = 2
julia> MyString = "there are $n ducks"
"there are 2 ducks"
数値以外の型を使うことができます。
Result = false
julia> println("test results is $Result")
test results is false
指定された文字列内に複数の補間を行うことができます:
MySubStr = "a32"
MyNum = 123.31
println("$MySubStr , $MyNum")
パフォーマンスのヒント補間は非常に便利です。しかし、あなたが何回もそれを非常に迅速にやろうとするなら、それは最も効率的ではありません。代わりに、パフォーマンスが問題になる場合は、 数値型を文字列に変換して候補を参照してください。
スプリントを使用してIO関数を使用してストリングを作成する
文字列は、 sprint
関数を使用してIO
オブジェクトで機能する関数から作成できます。たとえば、 code_llvm
関数は最初の引数としてIO
オブジェクトを受け入れます。典型的には、以下のように使用されます。
julia> code_llvm(STDOUT, *, (Int, Int))
define i64 @"jlsys_*_46115"(i64, i64) #0 {
top:
%2 = mul i64 %1, %0
ret i64 %2
}
その出力を代わりに文字列として欲しいとします。その後、私たちは単純に
julia> sprint(code_llvm, *, (Int, Int))
"\ndefine i64 @\"jlsys_*_46115\"(i64, i64) #0 {\ntop:\n %2 = mul i64 %1, %0\n ret i64 %2\n}\n"
julia> println(ans)
define i64 @"jlsys_*_46115"(i64, i64) #0 {
top:
%2 = mul i64 %1, %0
ret i64 %2
}
code_llvm
ような "対話型"関数の結果を文字列に変換することは、生成されたコードが後退している可能性があるかどうかのテストなど、自動分析に役立ちます。
sprint
関数は、 IO
オブジェクトを最初の引数として操作する関数をとる高次関数です 。その背後では、RAMにIOBuffer
を作成し、 IOBuffer
れた関数を呼び出し、バッファからString
オブジェクトにデータを取得します。