サーチ…


構文

  • "[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オブジェクトにデータを取得します。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow