F#-文字列

F#では、文字列型は不変のテキストをUnicode文字のシーケンスとして表します。

文字列リテラル

文字列リテラルは、引用符( ")文字で区切られます。

改行、タブなどの特殊用途のためにいくつかの特殊文字があります。それらはバックスラッシュ(\)文字を使用してエンコードされます。バックスラッシュ文字と関連する文字がエスケープシーケンスを作成します。次の表は、F#でサポートされているエスケープシーケンスを示しています。

キャラクター エスケープシーケンス
バックスペース \ b
改行 \ n
キャリッジリターン \ r
タブ \ t
バックスラッシュ \\
クォーテーションマーク \ "
アポストロフィ \ '
Unicode文字 \ uXXXXまたは\ UXXXXXXXX(Xは16進数を示します)

エスケープシーケンスを無視する方法

次の2つの方法により、コンパイラはエスケープシーケンスを無視します-

  • @記号を使用します。
  • 文字列を三重引用符で囲みます。

文字列リテラルの前に@記号が付いている場合、それは verbatim string. このようにして、2つの引用符文字が1つの引用符文字として解釈されることを除いて、文字列内のすべてのエスケープシーケンスが無視されます。

文字列が三重引用符で囲まれている場合、二重引用符文字を含むすべてのエスケープシーケンスも無視されます。

次の例は、引用符が埋め込まれたXMLまたはその他の構造を操作する方法を示すこの手法を示しています。

// Using a verbatim string
let xmldata = @"<book author = ""Lewis, C.S"" title = ""Narnia"">"
printfn "%s" xmldata

プログラムをコンパイルして実行すると、次の出力が生成されます。

<book author = "Lewis, C.S" title = "Narnia">

文字列の基本的な演算子

次の表は、文字列の基本的な操作を示しています-

説明
収集:(文字→文字列)→文字列→文字列 入力文字列の各文字に指定された関数を適用し、結果の文字列を連結した結果の文字を持つ新しい文字列を作成します。
concat:文字列→seq <文字列>→文字列 指定された文字列を区切り文字で連結して作成された新しい文字列を返します。
存在する:(char→bool)→string→bool 文字列のいずれかの文字が指定された述語を満たすかどうかをテストします。
forall:(char→bool)→string→bool 文字列内のすべての文字が指定された述語を満たすかどうかをテストします。
init:int→(int→string)→string 指定された関数を各インデックスに適用し、結果の文字列を連結した結果の文字を持つ新しい文字列を作成します。
iter:(char→unit)→string→unit 文字列内の各文字に指定された関数を適用します。
iteri:(int→char→unit)→string→unit 文字列内の各文字のインデックスと文字自体に指定された関数を適用します。
長さ:文字列→int 文字列の長さを返します。
マップ:(char→char)→string→string 入力文字列の各文字に指定された関数を適用した結果の文字を持つ新しい文字列を作成します。
mapi:(int→char→char)→string→string 入力文字列の各文字とインデックスに指定された関数を適用した結果の文字を持つ新しい文字列を作成します。
レプリケート:int→string→string 文字列の指定された数のインスタンスを連結して文字列を返します。

次の例は、上記の機能のいくつかの使用法を示しています-

例1

String.collect関数は、指定された関数を入力文字列の各文字に適用し、結果の文字列を連結した結果である文字を持つ新しい文字列を作成します。

let collectTesting inputS =
   String.collect (fun c -> sprintf "%c " c) inputS
printfn "%s" (collectTesting "Happy New Year!")

プログラムをコンパイルして実行すると、次の出力が生成されます。

H a p p y N e w Y e a r !

例2

String.concat関数は、指定された文字列のシーケンスを区切り文字で連結し、新しい文字列を返します。

let strings = [ "Tutorials Point"; "Coding Ground"; "Absolute Classes" ]
let ourProducts = String.concat "\n" strings
printfn "%s" ourProducts

プログラムをコンパイルして実行すると、次の出力が生成されます。

Tutorials Point
Coding Ground
Absolute Classes

例3

String.replicateメソッドは、指定された数の文字列のインスタンスを連結して文字列を返します。

printfn "%s" <| String.replicate 10 "*! "

プログラムをコンパイルして実行すると、次の出力が生成されます。

*! *! *! *! *! *! *! *! *! *!