Main Content

string 配列の作成

string 配列は、テキストを格納し、テキストをデータとして処理するための一連の関数を提供します。string 配列は、他のタイプの配列と同じようにインデックス付け、形状変更および連結を行えます。また、string 内の文字にアクセスしたり、plus 演算子を使用して string にテキストを追加したりできます。string 配列内の string を並べ替えるには、splitjoinsort などの関数を使用します。

変数からの string 配列の作成

MATLAB® にはテキストを格納するための string 配列が用意されています。string 配列の各要素は 1 行 n 列の文字シーケンスを含みます。

二重引用符を使用して string を作成できます。

str = "Hello, world"
str = 
"Hello, world"

代替方法として、関数 string を使用して、文字ベクトルを string に変換することもできます。chr は 1 行 17 列の文字ベクトルです。str は、文字ベクトルと同じテキストをもつ 1 行 1 列の string です。

chr = 'Greetings, friend'
chr = 
'Greetings, friend'
str = string(chr)
str = 
"Greetings, friend"

[] 演算子を使用して複数の string を含む string 配列を作成します。str は、6 個の string を含む 2 行 3 列の string 配列です。

str = ["Mercury","Gemini","Apollo";
       "Skylab","Skylab B","ISS"]
str = 2x3 string
    "Mercury"    "Gemini"      "Apollo"
    "Skylab"     "Skylab B"    "ISS"   

関数 strlength を使用して、str 内の各 string の長さを求めます。string 内の文字数を判定するには、length ではなく strlength を使用します。

L = strlength(str)
L = 2×3

     7     6     6
     6     8     3

代替方法として、関数 string を使用して、文字ベクトルの cell 配列を string 配列に変換することもできます。MATLAB では、string 配列内の string は二重引用符で囲んで表示され、cell 配列内の文字ベクトルは一重引用符で囲んで表示されます。

C = {'Mercury','Venus','Earth'}
C = 1x3 cell
    {'Mercury'}    {'Venus'}    {'Earth'}

str = string(C)
str = 1x3 string
    "Mercury"    "Venus"    "Earth"

文字ベクトルに加えて、数値、datetime、duration、categorical の値も、関数 string を使用して string に変換できます。

数値配列を string 配列に変換します。

X = [5 10 20 3.1416];
string(X)
ans = 1x4 string
    "5"    "10"    "20"    "3.1416"

datetime の値を string に変換します。

d = datetime('now');
string(d)
ans = 
"20-Jul-2024 14:54:31"

また、関数 readtabletextscan および fscanf を使用すると、ファイルから string 配列にテキストを読み取ることができます。

空の string と欠損 string の作成

string 配列には、空の値と欠損値の両方を含めることができます。空の string には文字が 1 つも含まれません。空の string を表示すると、結果は間に何もない二重引用符のペア ("") となります。欠損 string は、数値配列の NaN と等価の string です。string 配列のどこに欠損値があるかを示します。欠損 string を表示すると、結果は引用符なしの <missing> となります。

関数 strings を使用して空の string 配列を作成します。引数なしで strings を呼び出すと、空の string が返されます。str のサイズが 0 行 0 列ではなく 1 行 1 列であることに注意してください。ただし、str には文字が 1 つも含まれません。

str = strings
str = 
""

一重引用符を使用して空の文字ベクトルを作成します。chr のサイズが 0 行 0 列であることに注意してください。

chr = ''
chr =

  0x0 empty char array

すべての要素が空の string である string 配列を作成します。関数 strings を使用すると、string 配列をあらかじめ割り当てることができます。

str = strings(2,3)
str = 2x3 string
    ""    ""    ""
    ""    ""    ""

欠損 string を作成するには、関数 string を使用して欠損値を変換します。欠損 string は <missing> として表示されます。

str = string(missing)
str = 
<missing>

空の string と欠損 string の両方を含む string 配列を作成できます。どの要素が欠損値を含む string であるかを判別するには、関数 ismissing を使用します。空の string は欠損 string ではないことに注意してください。

str(1) = "";
str(2) = "Gemini";
str(3) = string(missing)
str = 1x3 string
    ""    "Gemini"    <missing>

ismissing(str)
ans = 1x3 logical array

   0   0   1

欠損 string を別の string と比較します。欠損 string をもう 1 つの欠損 string と比較した場合でも、結果は常に 0 (false) です。

str = string(missing);
str == "Gemini"
ans = logical
   0

str == string(missing)
ans = logical
   0

string 配列の要素へのアクセス

string 配列は、インデックス付けや整形などの配列演算をサポートします。配列インデックス付けを使用して、str の最初の行とすべての列にアクセスします。

str = ["Mercury","Gemini","Apollo";
       "Skylab","Skylab B","ISS"];
str(1,:)
ans = 1x3 string
    "Mercury"    "Gemini"    "Apollo"

str の 2 行目の 2 番目の要素にアクセスします。

str(2,2)
ans = 
"Skylab B"

str の範囲の外に新しい string を割り当てます。MATLAB は配列を拡張し、未割り当ての要素を欠損値で埋めます。

str(3,4) = "Mir"
str = 3x4 string
    "Mercury"    "Gemini"      "Apollo"     <missing>
    "Skylab"     "Skylab B"    "ISS"        <missing>
    <missing>    <missing>     <missing>    "Mir"    

文字列内の文字へのアクセス

中かっこ {} を使用して string 配列にインデックスを付け、文字に直接アクセスできます。中かっこは、string 要素内の文字にアクセスして変更する必要がある場合に使用します。中かっこを使用したインデックスにより、string 配列と文字ベクトルの cell 配列の両方を処理できるコードの互換性を提供することができます。ただし string 内の文字を処理するには、可能な限り string の関数を使用してください。

中かっこを使用して、2 行目の 2 番目の要素にアクセスします。chr は string ではなく文字ベクトルです。

str = ["Mercury","Gemini","Apollo";
       "Skylab","Skylab B","ISS"];
chr = str{2,2}
chr = 
'Skylab B'

文字ベクトルにアクセスして最初の 3 文字を返します。

str{2,2}(1:3)
ans = 
'Sky'

string 内で空白文字を見つけてダッシュに置き換えます。関数 isspace を使用して string 内の個々の文字を検査します。isspace は、空白文字がある位置に真の値を含む logical ベクトルを返します。最後に、変更した string 要素 str(2,2) を表示します。

TF = isspace(str{2,2})
TF = 1x8 logical array

   0   0   0   0   0   0   1   0

str{2,2}(TF) = "-";
str(2,2)
ans = 
"Skylab-B"

ここでは関数 replace を使用して、中かっこによるインデックスを使用しないで空白を置き換えることもできます。

replace(str(2,2)," ","-")
ans = 
"Skylab-B"

string を string 配列に連結

他の種類の配列を連結するのと同じように、string 配列に string を連結します。

大かっこ [] を使用して 2 つの string 配列を連結します。

str1 = ["Mercury","Gemini","Apollo"];
str2 = ["Skylab","Skylab B","ISS"];
str = [str1 str2]
str = 1x6 string
    "Mercury"    "Gemini"    "Apollo"    "Skylab"    "Skylab B"    "ISS"

str1str2 を転置します。これらを連結し、次に列見出しを string 配列に垂直方向に連結します。文字ベクトルを string 配列に連結すると、文字ベクトルは自動的に文字列に変換されます。

str1 = str1';
str2 = str2';
str = [str1 str2];
str = [["Mission:","Station:"] ; str]
str = 4x2 string
    "Mission:"    "Station:"
    "Mercury"     "Skylab"  
    "Gemini"      "Skylab B"
    "Apollo"      "ISS"     

テキストを string に追加

テキストを string に追加するには、plus 演算子 + を使用します。plus 演算子はテキストを string に追加しますが、string 配列のサイズは変更しません。

名前の配列に姓を追加します。文字ベクトルを string に追加すると、文字ベクトルは自動的に string に変換されます。

names = ["Mary";"John";"Elizabeth";"Paul";"Ann"];
names = names + ' Smith'
names = 5x1 string
    "Mary Smith"
    "John Smith"
    "Elizabeth Smith"
    "Paul Smith"
    "Ann Smith"

それぞれ異なる姓を追加します。string 配列または文字ベクトルの cell 配列からのテキストを string 配列に追加できます。非スカラー配列を追加する場合、配列は同じサイズでなければなりません。

names = ["Mary";"John";"Elizabeth";"Paul";"Ann"];
lastnames = ["Jones";"Adams";"Young";"Burns";"Spencer"];
names = names + " " + lastnames
names = 5x1 string
    "Mary Jones"
    "John Adams"
    "Elizabeth Young"
    "Paul Burns"
    "Ann Spencer"

欠損 string を追加します。加算演算子を使用して欠損 string を追加すると、出力は欠損 string となります。

str1 = "Jones";
str2 = string(missing);
str1 + str2
ans = 
<missing>

string 配列の分割、結合、並べ替え

MATLAB には、string 配列を処理するための関数が豊富に用意されています。たとえば、関数 splitjoin および sort を使用して、名前が姓のアルファベット順になるよう string 配列 names を並べ替えることができます。

names を空白文字の位置で分割します。分割により、names は 5 行 1 列の string 配列から 5 行 2 列の配列に変わります。

names = ["Mary Jones";"John Adams";"Elizabeth Young";"Paul Burns";"Ann Spencer"];
names = split(names)
names = 5x2 string
    "Mary"         "Jones"  
    "John"         "Adams"  
    "Elizabeth"    "Young"  
    "Paul"         "Burns"  
    "Ann"          "Spencer"

姓が最初の列になるように、names の列を切り替えます。それぞれの姓の後にコンマを追加します。

names = [names(:,2) names(:,1)];
names(:,1) = names(:,1) + ','
names = 5x2 string
    "Jones,"      "Mary"     
    "Adams,"      "John"     
    "Young,"      "Elizabeth"
    "Burns,"      "Paul"     
    "Spencer,"    "Ann"      

姓と名を結合します。関数 join は、結合する string の間に空白文字を配置します。結合後、names は 5 行 1 列の string 配列になります。

names = join(names)
names = 5x1 string
    "Jones, Mary"
    "Adams, John"
    "Young, Elizabeth"
    "Burns, Paul"
    "Spencer, Ann"

names の要素をアルファベット順に並べ替えます。

names = sort(names)
names = 5x1 string
    "Adams, John"
    "Burns, Paul"
    "Jones, Mary"
    "Spencer, Ann"
    "Young, Elizabeth"

参考

| | | | | | | |

関連するトピック