string
型は、変更できないテキストを Unicode 文字のシーケンスとして表します。
string
は .NET の System.String
の別名です。
注釈
文字列リテラルは、引用符 (") 文字で区切られます。 円記号 (\) は、特定の特殊文字をエンコードするために使用されます。 円記号と次の文字は一緒に エスケープ シーケンスと呼ばれます。 F# 文字列リテラルでサポートされているエスケープ シーケンスを次の表に示します。
キャラクター | エスケープ シーケンス |
---|---|
アラート | \a |
バックスペース | \b |
フォーム フィード | \f |
新しい行 | \n |
キャリッジ リターン | \r |
タブ | \t |
縦タブ | \v |
バックスラッシュ | \\ |
引用符 | \" |
アポストロフィ | \' |
Unicode 文字コード |
\DDD (ここで、 D は 10 進数字を示し、範囲は 000 から 255、例: \231 = "ç") |
Unicode 文字コード |
\xHH (ここで、 H は 16 進数を示し、範囲は 00 - FF、例: \xE7 = "ç") |
Unicode 文字コード |
\uHHHH (UTF-16)(ここで、 H は 16 進数を示し、範囲は 0000 - FFFF です。たとえば、 \u00E7 = "ç") |
Unicode 文字コード |
\U00HHHHHH (UTF-32)(ここで、 H は 16 進数を示します。0000000 ~ 10FFFF の範囲。たとえば、 \U0001F47D = "👽") |
Von Bedeutung
\DDD
エスケープ シーケンスは 10 進表記であり、他のほとんどの言語のような 8 進数表記ではありません。 したがって、数字 8
と 9
は有効であり、一連の \032
はスペース (U+0020) を表しますが、8 進数表記の同じコード ポイントは \040
。
注
0 ~ 255 (0xFF) の範囲に制限されているため、 \DDD
および \x
エスケープ シーケンスは、最初の 256 Unicode コード ポイントに一致するため、実質的には ISO-8859-1 文字セットになります。
逐語的な文字列
@ 記号の前に @ 記号が付いている場合、リテラルは逐語的な文字列です。 逐語的な文字列を宣言すると、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\ndef"
を持つ文字列str1
と、値"abcdef"
を持つ文字列str2
が生成されます。
let str1 =
"abc
def"
let str2 =
"abc\
def"
文字列のインデックス作成とスライス
配列に似た構文を使用して、文字列内の個々の文字にアクセスできます。 次の例では、 []
を使用して文字列のインデックスを作成します。 この構文は F# 6.0 で導入されました。
.[]
を使用して、すべてのバージョンの文字列にインデックスを付けることもできます。 新しい構文をお勧めします。
printfn "%c" str1[1]
出力は b
になります。
または、次のコードに示すように、配列スライス構文を使用して部分文字列を抽出することもできます。
printfn "%s" str1[0..2]
printfn "%s" str2[3..5]
出力は次のとおりです。
abc
def
ASCII 文字列は、符号なしバイトの配列 byte[]
型で表すことができます。 サフィックス B
を文字列リテラルに追加して、それが ASCII 文字列であることを示します。 バイト配列で使用される 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
文字列演算子
+
演算子を使用して文字列を連結し、.NET Framework 文字列処理機能との互換性を維持できます。 次の例は、文字列連結を示しています。
let string1 = "Hello, " + "world"
String クラス
F# の文字列型は実際には .NET Framework System.String
型であるため、すべての System.String
メンバーを使用できます。
System.String
には、文字列、Length
プロパティ、および文字列を Unicode 文字の配列として返すChars
プロパティを連結するために使用される+
演算子が含まれています。 文字列の詳細については、「 System.String
」を参照してください。
System.String
の Chars
プロパティを使用すると、次のコードに示すように、インデックスを指定することで、文字列内の個々の文字にアクセスできます。
let printChar (str: string) (index: int) =
printfn "First character: %c" (str.Chars(index))
文字列モジュール
文字列処理の追加機能は、FSharp.Core
名前空間の String
モジュールに含まれています。 詳細については、「 文字列モジュール」を参照してください。
こちらも参照ください
.NET