文字列 (F#)
string 型は、Unicode 文字のシーケンスとしての、変更不可のテキストを表します。string は、.NET Framework の String のエイリアスです。
解説
リテラル文字列は引用符 (") で区切ります。特定の特殊文字をエンコードするには、円記号 (\) を使用します。円記号とそれに続く文字の組み合わせをエスケープ シーケンスと呼びます。F# のリテラル文字列でサポートされるエスケープ シーケンスを次の表に示します。
文字 |
エスケープ シーケンス |
---|---|
バックスペース |
\b |
改行 |
\n |
キャリッジ リターン |
\r |
タブ |
\t |
円記号 |
\\ |
二重引用符 |
\" |
アポストロフィ |
\' |
Unicode 文字 |
\uXXXX または \UXXXXXXXX (X は 16 進数の数字を示します) |
@ 記号の後に続くリテラルは、逐語的文字列です。この場合、2 つの引用符文字が 1 つの引用符文字として解釈されることを除いて、エスケープ シーケンスはすべて無視されます。
また、文字列は三重の引用符で囲まれている場合があります。この場合、すべてのエスケープ シーケンスは二重引用符文字が、無視されます。埋め込み囲まれた文字列を含む文字列を指定するには、逐語的文字列または三重引用符文字列を使用できます。逐語的文字列を使用する場合は、単一引用符文字を示すために、 2 種類の引用符文字を指定します。は、引用された文字列を使用すると、解析されているなしでとして文字列の末尾単一引用符文字を使用できます。この手法は、埋め込み引用符を含む別の構造体または XML を使用する場合に便利です。
// Using a verbatim string
let xmlFragment1 = @"<book author=""Milton, John"" title=""Paradise Lost"">"
// Using a triple-quoted string
let xmlFragment2 = """<book author="Milton, John" title="Paradise Lost">"""
コードでは、改行を含む文字列はそのまま、改行は文字どおり改行として解釈されます。ただし、改行の前の最後の文字が円記号である場合を除きます。円記号がある場合、次の行の先頭にある空白は無視されます。次のコードは、値 "abc\n def" を持つ文字列 str1 と、値 "abcdef" を持つ文字列 str2 を生成します。
let str1 = "abc
def"
let str2 = "abc\
def"
配列に似た次のような構文を使用して、文字列内の各文字にアクセスできます。
printfn "%c" str1.[1]
出力は b になります。
また、次のコードに示すように、配列スライスの構文を使用して部分文字列を抽出できます。
printfn "%s" (str1.[0..2])
printfn "%s" (str2.[3..5])
出力は次のとおりです。
abc
def
ASCII 文字列は、符号なしバイトの配列である byte[] 型で表すことができます。リテラル文字列が ASCII 文字列であることを示すには、サフィックス B を追加します。バイト配列を使用した ASCII リテラル文字列では、Unicode 文字列と同じエスケープ シーケンスがサポートされます (Unicode エスケープ シーケンスは除く)。
// "abc" interpreted as a Unicode string.
let str1 : string = "abc"
// "abc" interpreted as an ASCII byte array.
let bytearray : byte[] = "abc"B
文字列演算子
文字列を連結するには、+ 演算子または ^ 演算子を使用する 2 つの方法があります。+ 演算子を使用すると、.NET Framework の文字列処理機能との互換性が維持されます。
文字列の連結の例を次に示します。
let string1 = "Hello, " + "world"
String クラス
F# の文字列型は実際には .NET Framework の String 型であるため、すべての String のメンバーを使用できます。これには、+ 演算子 (文字列を連結するために使用される)、Length プロパティ、および Chars プロパティ (文字列を Unicode 文字の配列として返す) が含まれます。文字列の詳細については、「String」を参照してください。
String の Chars プロパティを使用すると、次のコードに示すように、インデックスを指定して文字列中の各文字にアクセスできます。
let printChar (str : string) (index : int) =
printfn "First character: %c" (str.Chars(index))
String モジュール
文字列を処理するためのその他の機能は、FSharp.Core 名前空間の String モジュールに含まれています。詳細については、「Core.String モジュール (F#)」を参照してください。