MATLAB基础知识数据类型字符和字符串创建字符串数组
R2016b 中引⼊了字符串数组。字符串数组可存储⽂本⽚段,并提供⼀组⽤于将⽂本按数据进⾏处理的函数。您可以对字符串数组进⾏索引、重构和进⾏串联,就像处理任何其他类型的数组⼀样。此外,还可以访问字符串中的字符,并使⽤ plus 运算符向字符串追加⽂本。要重新排列字符串数组中的字符串,请使⽤ split、join 和 sort 等函数。
根据变量创建字符串数组
MATLAB 提供字符串数组来存储⽂本⽚段。字符串数组的每个元素都包含⼀个 1×n 字符序列。
从 R2017a 开始,您可以使⽤双引号创建字符串。
str ="Hello, world"
str =
"Hello, world"
作为备选⽅法,您可以使⽤ string 函数将字符向量转换为字符串。chr 为⼀个 1×17 字符向量。str 为⼀个与该字符向量具有相同⽂本的1×1 字符串。
chr ='Greetings, friend'
chr =
'Greetings, friend'
str =string(chr)
str =
"Greetings, friend"
使⽤ [] 运算符创建⼀个包含多个字符串的字符串数组。str 是⼀个 2×3 字符串数组,其中包含六个字符串。
str =["Mercury","Gemini","Apollo";
"Skylab","Skylab B","ISS"]
str =2x3 string
"Mercury""Gemini""Apollo"
"Skylab""Skylab B""ISS"
通过 strlength 函数计算 str 中的每个字符串的长度。使⽤ strlength ⽽⾮ length 来确定字符串中的字符数量。
L =strlength(str)
L =2×3
766
683
作为备选⽅法,您可以使⽤ string 函数将字符向量元胞数组转换为字符串数组。MATLAB 使⽤双引号显⽰字符串数组中的字符串,使⽤单引号显⽰元胞数组中的字符向量。
C ={'Mercury','Venus','Earth'}
C =1x3 cell
{'Mercury'}{'Venus'}{'Earth'}
str =string(C)
str =1x3 string
"Mercury""Venus""Earth"
除了字符向量,您还可以使⽤ string 函数将数值、⽇期时间、持续时间和分类值转换为字符串。
将数值数组转换为字符串数组。
X =[510203.1416];
string(X)
ans =1x4 string
"5""10""20""3.1416"
将⽇期时间值转换为字符串。
d =datetime('now');
string(d)
ans =
"03-Aug-2020 20:30:39"
此外,您也可以使⽤ readtable、textscan 和 fscanf 函数将⽂件中的⽂本读⼊字符串数组。
创建空字符串和缺失字符串
字符串数组可以包含空值和缺失值。空字符串不包含字符。当您显⽰空字符串时,结果为⼀对其间不包含任何内容的双引号 ("")。缺失字符串相当于数值数组的 NaN。它指⽰字符串数组包含缺失值的位置。当您显⽰缺失字符串时,结果为 ,且不带任何引号。
使⽤ strings 函数创建⼀个空字符串数组。在不带任何参数的情况下调⽤ strings 时,将会返回⼀个空字符串。请注意,str 的⼤⼩是
1×1,⽽不是 0×0。但是,str 不包含字符。
str = strings
str =
""
使⽤单引号创建⼀个空字符向量。请注意,chr 的⼤⼩是 0×0。
chr =''
chr =
0x0 empty char array
创建⼀个所有元素都是空字符串的字符串数组。您可以使⽤ strings 函数预分配⼀个字符串数组。
str =strings(2,3)
str =2x3 string
""""""
数组转换成字符串""""""
要创建缺失字符串,请使⽤ string 函数转换缺失值。缺失字符串显⽰为 。
str =string(missing)
str =
<missing>
您可以创建同时包含空字符串和缺失字符串的字符串数组。使⽤ ismissing 函数确定哪些元素为包含缺失值的字符串。请注意,空字符串不是缺失字符串。
str(1)="";
str(2)="Gemini";
str(3)=string(missing)
str =1x3 string
"""Gemini"<missing>
ismissing(str)
ans =1x3 logical array
001
将⼀个缺失字符串与另⼀个字符串进⾏⽐较。结果始终为 0 (false),即使您将⼀个缺失字符串与另⼀个缺失字符串进⾏⽐较也是如此。
str =string(missing);
str =="Gemini"
ans = logical
str ==string(missing)
ans = logical
访问字符串数组的元素
字符串数组⽀持数组运算,例如进⾏索引和重构。使⽤数组索引访问 str 的第⼀⾏以及所有列。
str =["Mercury","Gemini","Apollo";
"Skylab","Skylab B","ISS"];
str(1,:)
ans =1x3 string
"Mercury""Gemini""Apollo"
访问 str 的第⼆⾏中的第⼆个元素。
str(2,2)
ans =
"Skylab B"
在 str 的边界之外分配⼀个新字符串。MATLAB 将扩展该数组并使⽤缺失值填充未分配的元素。
str(3,4)="Mir"
str =3x4 string
"Mercury""Gemini""Apollo"<missing>
"Skylab""Skylab B""ISS"<missing>
<missing><missing><missing>"Mir"
访问字符串中的字符
您可以使⽤花括号 {} 对字符串数组进⾏索引以直接访问字符。当您需要访问和修改字符串元素中的字符时,请使⽤花括号。通过花括号进⾏索引为可处理字符串数组或字符向量元胞数组的代码提供了兼容性。但是只要有可能,请尽量使⽤字符串函数来处理字符串中的字符。
使⽤花括号访问第⼆⾏中的第⼆个元素。chr 是⼀个字符向量,⽽不是字符串。
str =["Mercury","Gemini","Apollo";
"Skylab","Skylab B","ISS"];
chr = str{2,2}
chr =
'Skylab B'
访问该字符向量并返回前三个字符。
str{2,2}(1:3)
ans =
'Sky'
查字符串中的空格字符,并将这些字符替换为短划线。使⽤ isspace 函数检查字符串中的单个字符。isspace 会返回⼀个逻辑向量,只要存在⼀个空格字符,该向量即包含⼀个 true 值。最后,显⽰修改后的字符串元素 str(2,2)。
TF =isspace(str{2,2})
TF =1x8 logical array
00000010
str{2,2}(TF)="-";
str(2,2)
ans =
"Skylab-B"
请注意,在该⽰例中,您也可以使⽤ replace 函数来替换空格,⽽⽆需借助于花括号索引。
replace(str(2,2)," ","-")
ans =
"Skylab-B"
将字符串串联到字符串数组中
将字符串串联到字符串数组中,就像您串联任何其他类型的数组⼀样。
使⽤⽅括号 [] 串联两个字符串数组。
str1 =["Mercury","Gemini","Apollo"];
str2 =["Skylab","Skylab B","ISS"];
str =[str1 str2]
str =1x6 string
"Mercury""Gemini""Apollo""Skylab""Skylab B""ISS"
转置 str1 和 str2。将它们进⾏串联,然后将列标题垂直串联到字符串数组上。当您将字符向量串联到字符串数组中时,字符向量会⾃动转换为字符串。
str1 = str1';
str2 = str2';
str =[str1 str2];
str =[["Mission:","Station:"]; str]
str =4x2 string
"Mission:""Station:"
"Mercury""Skylab"
"Gemini""Skylab B"
"Apollo""ISS"
向字符串追加⽂本
要向字符串追加⽂本,请使⽤ plus 运算符 +。plus 运算符可向字符串追加⽂本,但不会更改字符串数组的⼤⼩。
在名字数组中追加⼀个姓⽒。如果您将某个字符向量追加到字符串,则该字符向量将⾃动转换为字符串。
names =["Mary";"John";"Elizabeth";"Paul";"Ann"];
names = names +' Smith'
names =5x1 string
"Mary Smith"
"John Smith"
"Elizabeth Smith"
"Paul Smith"
"Ann Smith"
追加不同的姓⽒。您可以将⽂本从⼀个字符串数组或字符向量元胞数组追加到另⼀个字符串数组。当您添加⾮标量数组时,这些数组的⼤⼩必须相同。
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"
追加缺失字符串。当您使⽤加号运算符追加缺失字符串时,输出为⼀个缺失字符串。
str1 ="Jones";
str2 =string(missing);
str1 + str2
ans =
<missing>
拆分、联接和排序字符串数组
MATLAB 提供了⼀组丰富的函数来处理字符串数组。例如,您可以使⽤ split、join 和 sort 函数重新排列字符串数组 names,以使名字按姓⽒的字母顺序排列。
按空格字符拆分 names。拆分会将 names 从 5×1 字符串数组更改为 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 函数在它联接的字符串之间放置⼀个空格字符。进⾏联接之后,names 为⼀个 5×1 字符串数组。
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"

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。