Compose-3000:OMLでの文字列の操作
Tutorial Level: Beginner
このチュートリアルでは、以下の操作方法について説明します:
- 文字列を作成して代入する。
- 文字列を連結する。
- 文字列を置き換える。
- 文字列を分割する。
- 文字列を比較する。
文字列の作成と代入
文字列は、一重引用符で囲んだオブジェクトです。以下に例を示します。
'Hello World'
この文字列を変数に代入するには、次のコマンドを記述します。
a= 'Hello World'
現在のOMLのリリースでは、二重引用符が有効な文字列区切り記号ではないので、二重引用符で囲むと次のようにエラーが返されます。

次に有効な引用符の使用方法を示します。

連結を使用した文字列の操作
-
文字列
‘The quick brown fox jumps over the lazy dog’
をa
に代入し、新しい文字列b
に‘Hello World’
を代入しても、この2つの文字列は加算できません。加算しようとすると次のエラーが表示されます。式
‘a + b’
は、一見すると‘a’
の後ろに‘b’
を連結するように見えますが、実際にはそのような処理にはなりません。OMLでは、文字列がASCII文字(文字列と等価な整数)のベクトルとして保存されます。長さが異なるベクトルは加算できないので、このようなエラーになります。 -
‘a’
と‘b’
を連結するには、次のように、strcat(a,b)
を使用します。 -
角括弧のペアを使用してこの連結を実行することもできます。
次のように、
[a,' ',b]
は、a
とb
がスペースで連結された文字列になります。
文字列の置換
文字列を部分的に別の文字列に置き換える方法がいくつかあります。
-
次のように、組み込み関数strrepを直接使用できます。
string = 'there are ten boys and ten girls.' strRep = strrep(string,'ten','five')
-
strrepでは、すべての文字列の中で該当する部分が置き換えられます。上記の例で、最初の
‘ten’
のみを置き換えるには、strfindを使用して最初の‘ten’
のインデックスを探し、その前後ですべての文字列を連結します。次に例を示します。strIn = 'there are ten boys and ten girls.' % find string first index = strfind(strIn,'ten'); index1 = index(1); index2 = index1 + length('ten'); strOut = strcat(strIn(1:index1-1),' five',strIn(index2:end))
-
regexp関数を使用して、文字列
‘ten’
の最初と最後のインデックスを探してから同様に連結することもできます。次に例を示します。strIn = 'there are ten boys and ten girls.' % using regexp index1 = regexp(strIn,'ten','start'); index2 = regexp(strIn,'ten','end'); strOut = strcat(strIn(1:index1(1)-1),'five',strIn(index2(1)+1:length(strIn)))
前の例と同じ結果が得られます。
文字列の分割
-
文字列を単語に分割するには、組み込み関数strsplitを使用します。この操作では、単語の区切り文字を指定する必要があります。デフォルトの区切り文字はスペースです。
a = 'The quick brown fox jumps over the lazy dog' % split a string, default separator is blank space b = strsplit(a)
これにより、スペースで区切られた単語のそれぞれを文字列とするセルが生成されます。
-
文字列の中で、同じ区切り文字が一貫して使用されるとは限りません。次の例のように、考えられるすべての区切り文字を指定できます。
time = '2016/2/23,2016-2-24' % specify separators in a cell strOut = strsplit(time,{'/','-',','})
文字列の比較
-
文字列を比較するにはstrcmp関数を使用します。この関数は、2つの文字列を比較して同じ場合は1(
true
)、そうでない場合は0(false
)を返します。次に例を示します。str1 = 'this is str1'; str2 = 'this is str2'; out1 = strcmp(str1,str2)
この場合は、
str1
とstr2
が異なっているので、false
が返されます。 -
2つの文字列の先頭から
n
個の要素を比較する場合は、strncmpを使用します。前の例では先頭から11個の要素が同じなので、次の例ではtrue
が返されます。str1 = 'this is str1'; str2 = 'this is str2'; out1 = strncmp(str1,str2,11)
この結果は次のとおりです。
-
大文字と小文字を区別しない場合はstrcmpiを使用できます。
str3 = 'Abc'; str4 = 'ABC'; out3 = strcmp(str3,str4) % case insensitive out4 = strcmpi(str3,str4)
この結果は次のとおりです。