空文字列形式言語理論における空文字列(くうもじれつ・からもじれつ、英: empty string)とは、長さが0の一意な文字列であり、文字列における空集合である。主にコンピュータ、特にプログラミング言語において用いられる用語である。ヌル文字列(英: null string[1][2])とも呼ばれ、空文字列と同一視されることもあるが、ヌルポインタやヌル参照と紛らわしい。Javaではnull stringと言えば無効な参照値である 形式言語における空文字列形式的には、文字列は文字や数字といったシンボルの有限列として表現されるが、空文字列はこの有限列の特殊なケースである。空文字列は長さがゼロであり、何のシンボルも含まない。また、空文字列は必ず一つしか存在しない。これは、2つの異なる文字列が存在する場合、文字列の長さか、文字列に含まれるシンボルのいずれかが必ず異なっているためである。形式言語では、空文字列はλで表される(λの大文字であるΛや、εを使う場合もある)。 空文字列を空言語∅と混同しないこと。空言語は、形式言語(文字列の集合)において、空文字列すらも含まない空集合のことを意味する。 空文字列の持つ性質を以下に挙げる。
プログラミング言語における利用多くのプログラミング言語において、各文字列はそれぞれ個別のメモリ領域に格納される。そのため、同じ内容の文字列(例えば空文字列)がメモリ上の複数箇所に格納されることがある(長さ0の文字列でも格納にはメモリが必要なことに注意。使用するメモリの量は文字列の格納形式により異なる)。この場合、形式言語の定義と異なり、複数の空文字列がメモリ上に同時に存在することになる。しかし、文字列比較ルーチン(関数やメソッド)を使えば、これらの空文字列は全て同じであることを示すことができる。 空文字列はヌルポインタやヌル参照とは別物である。ヌルポインタやヌル参照の指す先には何も存在しない(空文字列すら存在しない)。たいていの言語で、ヌルポインタやヌル参照に対して何らかの処理を実行しようとした場合は通例不正な操作であるとみなされてエラーが発生するが、空文字列は正当な文字列のひとつとして扱われる。たとえばJavaにおいて try {
String str1 = null;
System.out.println(str1.length()); // NullPointerException
} catch (Exception e) {
System.out.println(e);
}
String str2 = "";
System.out.println(str2.length()); // 0
System.out.println("" == null); // false
System.out.println("".equals(null)); // false
C言語およびC++の標準ライブラリにおける文字列操作関数および文字列クラスでは、引数にヌルポインタ ( 一方、Objective-Cでは NSString* str1 = nil;
NSLog(@"%lu", (unsigned long)[str1 length]); // 0
NSLog(@"%lu", (unsigned long)str1.length); // 0
NSLog(@"%@", ([str1 isEqualToString: @""] ? @"YES" : @"NO")); // NO
プログラミング言語によっては、エラーの発生を低減するため以下の値を同じものとして扱うことがある。 また、プログラミング言語によっては、変数が最初に使われるとき、あらかじめ空文字列が入っているものとするものもある。 通常、空文字列は他の文字列と同じように表現される。文字列を、文字列終端文字を使用して(ヌル終端文字列または改行区切りのプレインテキストとして)実装している場合、空文字列は単一の文字列終端文字で表現される。
空文字列の例
関連項目参考文献
|