matlab字串連線(多個字串)的經驗
參考 matlab中字串連線的3種方法 文章,實驗遇到的一些小白問題,如有問題希望大神們給予指導。
Matlab中,兩個或多個字串連線常用的三種方法,如下:
背景知識:
1、char 和 string 區別
從定義的角度來說,單引號‘ ’定義的為char型別,雙引號“ ”定義的為string型別。
2、字串陣列(char)和字串(string)區別
字串陣列就相當於資料型別為char的矩陣或向量,用單引號建立,可以索引。
string相當於一個類,用string()函式建立例項物件,所以有一些函式可以對string進行操作。
方法一:[str1,str2]
字串陣列(char型別)的連線
假設兩個char型別
str1 = 'save ';
str2 = '.mat uData';
>> [str1,str2]
ans =
'save .mat uData'
假設兩個char型別和一個string型別
str1 = 'save '; str2 = '.mat uData'; str3 = "000"; >> [str1,str3,str2] ans = 1×3 string 陣列 "save " "000" ".mat uData";
輸出的結果變成string陣列,因此可知string優先順序高於char的優先順序。
如果考慮利用char()函式對結果進行處理會如何?
>> char([str1,str3,str2])
1×10×3 char 陣列
ans(:,:,1) =
'save '
ans(:,:,2) =
'123 '
ans(:,:,3) =
'.mat uData'
得到一個三維的char型別的矩陣(不知為何有三維,第二、三維分別表示最長字串的長度10和所要拼接的字串的數3量)。
因此,[str1,str2,...]的方法是將非char型別的資料轉換成char的型別,然後再使用該方法則可以得到char型別的輸出結果。
>> [str1, char(str3), str2]
ans =
'save 000.mat uData'
方法二:strcat函式
實質上,strcat函式的方法是在string資料型別進行字元拼接,然後將最後的結果轉換成型別char的字串。
下面介紹該方法的一個問題:
str1 = 'save '; %請注意後面的空格
str2 = '.mat uData';
str3 = "000";
>> char(strcat(str1, str3, str2))
ans =
'save000.mat uData' %請注意後面的空格已丟失
分析後,發現在strcat中會出現該情況,可能是在連線過程中會將空格刪除掉,如果是string型別,則不會丟失,如下方法1.
>> char(strcat("save ", str3, str2))
或者
>> char(strcat('save'," ", str3, str2))
ans =
'save 000.mat uData'
上述兩種方法輸出正常。值得注意的是,方法2,空格需要採用雙引號,這是因為strcat函式在連線字串主要注意空格的轉義方面的知識(現在不太瞭解,望見諒)
方法三:sprintf函式
>> sprintf('%s%s%s', str1, str3, str2)
ans =
'save 000.mat uData'
該方法至今沒有發現問題。