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 常用字符串数组处理函数