2.5 字符数据及操作
MATLAB提供了用来存储和处理字符类型(character)数据的字符数组和字符串数组。
2.5.1 字符向量与字符数组
构建字符向量是通过单撇号括起字符序列来实现的,向量中的每个元素对应一个字符。例如:
>> ch1='This is a book.'
ch1 =
'This is a book.'
若字符序列中含有单撇号,则该单撇号字符须用两个单撇号来表示。例如:
>> ch2='It''s a book.'
ch2 =
'It's a book.'
构建二维字符数组可以使用创建数值数组相同的方法,例如:
>> ch=['abcdef';'123456']
ch =
2×6 char 数组
'abcdef'
'123456'
这种创建字符数组的方式要求各行字符数相等。为此,有时不得不用空格来调节各行的长度,使它们彼此相等。如果各个字符串长度不等,可以使用char函数将不同长度的字符串组合成字符数组,例如:
>> language=char('Basic','Fortran','C++','MATLAB')
language =
4×7 char 数组
'Basic '
'Fortran'
'C++ '
'MATLAB '
MATLAB还有许多与字符处理有关的函数,表2.7列出了字符串与其他类型数组的相互转换函数,表2.8列出了字符串操作函数,表2.9列出了字符串检验函数。
表2.7 字符串与其他类型数组的相互转换函数
表2.8 字符串操作函数
表2.9 字符串检验函数
【例2.2】 建立一个字符串向量,然后对该向量做如下处理。
(1)取第5~12个字符组成的子字符串。
(2)统计字符串中大写字母的个数。
(3)将字符串中的大写字母变成相应的小写字母,其余字符不变。
命令如下:
>> ch='The Language of Technical Computing';
>> subch=ch(5:12)
subch =
'Language'
>> k=find(ch>='A' & ch<='Z');
>> length(k)
ans =
4
>> lower(ch)
ans =
'the language of technical computing'
2.5.2 字符串数组
从MATLAB 2016b开始,MATLAB提供了字符串数组(String array),可以更加高效地存储和处理文本数据。
字符数组主要用于存储1个或多个字符序列,数组中的每个元素都是一个字符,一个字符序列就构成一个字符向量;字符串数组更适合存储多段文本,数组中的每个元素都是一个字符向量,各存储一个字符序列,各个向量的长度可以不同。只有一个元素的字符串数组也称为字符串标量。
构建字符串对象是通过双引号括起字符序列来实现的。例如:
>> str1="Hello, world"
str1 =
"Hello, world"
可以使用string函数将其他类型的数组转换为字符串数组。
>> str2=string('Hello, world')
str2 =
"Hello, world"
在MATLAB 2017b中,字符串数组除了可以使用字符数组的处理函数,还增加了字符串数组的专用处理函数,表2.10列出了MATLAB提供的常用字符串数组处理函数。利用这些函数可以快速分析文本数据。
表2.10 常用字符串数组处理函数