参考 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'
该方法至今没有发现问题。