テキストの比較
MATLAB® では、string 配列および文字配列内のテキストを比較するためのいくつかの方法が用意されています。たとえば、関係演算子、matches 関数、または strcmp 関数を使用できます。string 配列は、他の配列型と同様に、sort 関数を使用して並べ替えることができます。また、テキスト内の文字を検査することもできます。たとえば、文字ベクトルや string 配列内にあるどの文字が英字や空白文字かを判別できます。
string 配列の等価性の比較
関係演算子 == および ~= を使用して、string 配列を比較してその等価性を評価できます。これらの演算子は、大文字と小文字を区別する比較を実行し、関係が真の場合には 1、関係が真でない場合には 0 を含む logical 配列を返します。
たとえば、2 つの string スカラーを作成します。string は二重引用符を使用して作成できます。
str1 = "Hello"str1 = "Hello"
str2 = "World"str2 = "World"
str1 と str2 が等しいかどうかを比較します。
str1 == str2
ans = logical
0
複数の要素を含む string 配列を、string スカラーと比較します。
str1 = ["Mercury","Gemini","Apollo"; ... "Skylab","Skylab B","International Space Station"]; str2 = "Apollo"; str1 == str2
ans = 2×3 logical array
0 0 1
0 0 0
string 配列を文字ベクトルと比較します。一方の変数が string 配列である限り、関係演算子を使用して比較できます。
chr = 'Gemini';
TF = (str1 == chr)TF = 2×3 logical array
0 1 0
0 0 0
logical 配列を使用して配列にインデックスを付けることができます。たとえば、TF を使用して str1 にインデックスを付け、'Gemini' に一致した string 要素を抽出します。
str1(TF)
ans = "Gemini"
~= 演算子を使用して不等価性を比較します。
TF = (str1 ~= chr)
TF = 2×3 logical array
1 0 1
1 1 1
str1 にインデックスを付けて 'Gemini' に一致しない要素を抽出します。
str1(TF)
ans = 5×1 string
"Mercury"
"Skylab"
"Skylab B"
"Apollo"
"International Space Station"
2 つの非スカラー string 配列を比較します。関係演算子を使用して 2 つの非スカラー string 配列を比較する場合、配列のサイズは同じでなければなりません。
str2 = ["Mercury","Mars","Apollo"; ... "Jupiter","Saturn","Neptune"]; TF = (str1 == str2)
TF = 2×3 logical array
1 0 1
0 0 0
str1 にインデックスを付けて等しい要素を抽出します。
str1(TF)
ans = 2×1 string
"Mercury"
"Apollo"
string 配列の比較による一致の検出
あるいは、matches 関数を使用して string 配列を比較することもできます。以下に例を示します。
matches("Hello","World")
ans = logical
0
matches(["Mercury","Gemini","Apollo"],"Apollo")
ans = 1×3 logical array
0 0 1
2 つの非スカラー string 配列を比較すると、matches は最初の配列の各要素を 2 番目の配列のすべての要素と比較します。したがって、matches では、2 つの非スカラー配列が同じサイズである必要はありません。
たとえば、サイズの異なる 2 つの非スカラー配列を比較します。matches 関数により、"Apollo" または "Mercury" のいずれかに一致する str1 の要素を見つけます。
str1 = ["Mercury","Gemini","Apollo"; ... "Skylab","Skylab B","International Space Station"]; str2 = ["Apollo" "Mercury"]; matches(str1,str2)
ans = 2×3 logical array
1 0 1
0 0 0
matches を使用して、string 配列をパターンに突き合わせることもできます。たとえば、str1 で英字のみを含む string 要素を見つけます。
pat = lettersPattern; matches(str1,pat)
ans = 2×3 logical array
1 1 1
1 0 0
matches 関数では、文字ベクトルおよび文字ベクトルの cell 配列もサポートされています。
その他の関係演算子を使用した string 配列の比較
文字列は、関係演算子 >、>=、< および <= を使用して比較することもできます。大文字で始まる文字列は、小文字で始まる文字列より順番が前になります。たとえば、文字列 "ABC" は、"abc" より小さくなります。数字と一部の句読点も、文字より前になります。
"ABC" < "abc"
ans = logical
1
> 演算子を使用して、名前を含む string 配列を、別の名前と比較します。Sanchez、de Ponte、Nash の名前は、それぞれ Matthews より後に来ます。これは、S、d、N はすべて M より大きいからです。
str = ["Sanchez","Jones","de Ponte","Crosby","Nash"]; TF = (str > "Matthews")
TF = 1×5 logical array
1 0 1 0 1
str(TF)
ans = 1×3 string
"Sanchez" "de Ponte" "Nash"
string 配列の並べ替え
string 配列を並べ替えることができます。MATLAB® では、UTF-16 文字エンコード スキームを使用して、文字を Unicode® として格納します。文字配列と string 配列は UTF-16 コード ポイント順に基づいて並べ替えられます。ASCII 文字でもある文字の場合、この順序では大文字が小文字よりも前になることを意味します。数字と一部の記号も文字より前にあります。
string 配列 str を並べ替えます。
sort(str)
ans = 1×5 string
"Crosby" "Jones" "Nash" "Sanchez" "de Ponte"
2 行 3 列の string 配列を並べ替えます。関数 sort は、各列ごとに個別に要素を並べ替えます。
sort(str1)
ans = 2×3 string
"Mercury" "Gemini" "Apollo"
"Skylab" "Skylab B" "International Space Station"
各行の要素を並べ替えるには、2 番目の次元に沿って str1 を並べ替えます。
sort(str1,2)
ans = 2×3 string
"Apollo" "Gemini" "Mercury"
"International Space Station" "Skylab" "Skylab B"
文字ベクトルの比較
strcmp 関数を使用して、文字ベクトルおよび文字ベクトルの cell 配列を比較できます。startsWith 関数を使用して、文字ベクトルが特定のパターンで始まるかどうかを判別できます。
たとえば、2 つの文字ベクトルを比較します。
chr1 = 'hello'; chr2 = 'he'; TF = strcmp(chr1,chr2)
TF = logical
0
MATLAB の strcmp 関数は、C バージョンの strcmp とは異なることに注意してください。C バージョンの strcmp は、2 つの文字配列が異なるときではなく、同じときに 0 を返します。
chr1 が chr2 の文字で始まっているかどうかを判別します。
TF = startsWith(chr1,chr2)
TF = logical
1
startsWith 関数では string 配列もサポートされています。
文字ベクトルの 2 つの cell 配列を比較します。strcmp 関数は要素単位の比較を実行し、cell 配列と同じサイズの logical 配列を返します。
C1 = {'pizza'; 'chips'; 'candy'};
C2 = {'pizza'; 'chocolate'; 'pretzels'};
strcmp(C1,C2)ans = 3×1 logical array
1
0
0
strcmp 関数では string 配列もサポートされています。
大文字と小文字を区別しないテキストの比較
大文字と小文字を区別せずに比較するには、strcmpi を使用するか、名前と値の引数 IgnoreCase を指定して matches を使用します。
たとえば、大文字と小文字を区別せずに文字ベクトルを比較して等価性を評価します。
chr1 = 'Hello'; chr2 = 'HELLO'; strcmpi(chr1,chr2)
ans = logical
1
matches(chr1,chr2,IgnoreCase=true)
ans = logical
1
大文字と小文字の区別を無視して 2 つの string 配列を比較します。strcmpi 関数は要素単位の比較を実行します。
str1 = ["Hello" "Ciao" "Bonjour"]; str2 = ["HELLO" "BONJOUR" "HOLA"]; strcmpi(str1,str2)
ans = 1×3 logical array
1 0 0
IgnoreCase を true に設定した matches 関数により、大文字と小文字を区別せずに、str1 の要素のうち、str2 のいずれかの要素と一致するものを見つけます。
matches(str1,str2,IgnoreCase=true)
ans = 1×3 logical array
1 0 1
string 配列および文字配列内の文字の検査
関数 isstrprop、isletter、isspace を使用して、string 配列または文字配列内の文字を検査できます。
isstrpropは string 配列または文字配列内の文字を検査。関数
isletterおよびisspaceは文字配列内のみの文字を検査。
文字ベクトル内のどの文字が空白文字かを特定します。isspace は、chr と同じサイズの logical ベクトルを返します。
chr = 'Four score and seven years ago';
TF = isspace(chr)TF = 1×30 logical array
0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0
関数 isstrprop は、文字がもつ多くの異なる特性をクエリできます。isstrprop では、string または文字ベクトル内の文字が、文字、英数字、10 進数、16 進数、または句読点であるかどうかを判別できます。
文字列内のどの文字が句読点であるかを特定します。isstrprop は、str 内の文字数と同じ長さの logical ベクトルを返します。
str = "A horse! A horse! My kingdom for a horse!"str = "A horse! A horse! My kingdom for a horse!"
isstrprop(str,"punct")ans = 1×41 logical array
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
文字ベクトル chr 内のどの文字がアルファベット文字であるかを特定します。
isstrprop(chr,"alpha")ans = 1×30 logical array
1 1 1 1 0 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 0 1 1 1 1 1 0 1 1 1
参考
strcmp | matches | string | sort | isstrprop | isletter | isspace | eq | ne | gt | ge | le | lt | startsWith | strncmp | endsWith | contains