空文字列

形式言語理論における空文字列



形式言語理論における文字列(empty string)とは、長さが0の文字列であり、記号を全く含まない、文字列における空集合のことです。主にコンピュータ、特にプログラミング言語において重要な概念として用いられます。空文字列は「ヌル文字列(null string)」とも呼ばれますが、プログラミングの世界では、ヌルポインタやヌル参照とは異なる概念として扱われます。例えばJavaでは、null stringは無効な参照値であるnullを指し、String型の有効な参照値である空文字列`""`とは明確に区別されます。

形式言語における空文字列



形式言語では、文字列は記号の有限列として表現されます。空文字列は、この有限列の特殊なケースであり、長さがゼロで、どの記号も含まない唯一の文字列です。異なる文字列が存在する場合、長さか含まれる記号が必ず異なるため、空文字列はただ一つしか存在しません。形式言語では、空文字列は通常`λ`で表されます(`Λ`や`ε`が使われることもあります)。

文字列と空言語の区別

文字列と混同しやすい概念に「空言語」があります。空言語は、文字列の集合である形式言語において、空文字列すらも含まない空集合を指します。

文字列の特性



以下に、空文字列の重要な性質をまとめます。

長さ:文字列の長さは0です (`|λ| = 0`)。
連結: 任意の文字列に空文字列を連結しても、元の文字列と同一になります (`λ + s = s + λ = s`)。これは、空文字列文字列連結における単位元であることを示しています。
反転:文字列を反転しても、空文字列のままです (`λ^R = λ`)。
辞書式順序: 辞書式順序において、空文字列は他のすべての文字列よりも前に配置されます。これは、空文字列が最も短い文字列であるためです。

プログラミング言語における利用



多くのプログラミング言語では、文字列はメモリ上の個別の領域に格納されます。そのため、同じ内容の文字列(例えば空文字列)が複数箇所に存在することがあります。ただし、文字列比較ルーチンを使えば、これらの空文字列は全て同じものとして扱われます。

文字列は、ヌルポインタやヌル参照とは明確に区別されます。ヌルポインタやヌル参照は何も指し示さないのに対し、空文字列は正当な文字列として扱われます。例えばJavaでは、nullを参照する文字列クラス変数の長さを求めようとするとNullPointerExceptionが発生しますが、空文字列の長さを求めると0が返ります。また、空文字列とnullを比較すると偽が返ります。

C/C++では、標準ライブラリの文字列操作関数にヌルポインタが渡されると、動作が未定義となり、プログラムが異常終了する可能性があります。一方、Objective-Cではnilに対する操作は正当とみなされますが、空文字列とは異なります。

プログラミング言語によっては、エラーを減らすために、以下の値を同じものとして扱う場合があります。

文字列
ヌル参照
整数の0
浮動小数点数の0
ブーリアン型のfalse
ASCIIヌル文字

また、変数が最初に使われる際に、初期値として空文字列が設定されることもあります。

通常、空文字列は他の文字列と同様に表現されます。例えば、ヌル終端文字列として実装されている場合、空文字列は単一のヌル文字で表現されます。

プログラミング言語によっては、数値などの文字列でない値と空文字列を連結すると、変数の型が文字列に変換されることがあります。

Oracle Databaseでは、空文字列とNULLが区別されません。

多くのプログラミング言語において、空文字列は最小のクワインとなります。

文字列の例



位取り記数法: 位取り記数法では、空文字列はどの基数においても0を表します(先行ゼロがない場合)。ただし、通常は数字の0で表現されます。
C言語: C言語では、空文字列ヌル文字を指すポインタで表現されます。ゼロで埋められたメモリ領域をヌル終端文字列として解釈すると、空文字列になります。
テキストファイル: テキストファイルでは、連続する改行コード(例:`

`)によって空行が生成され、段落の区切りなどに利用されます(例:Markdown)。

関連項目



空集合
* ヌル終端文字列

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。