Matlab中创建字符串数组
发布日期:2021-05-07 17:47:02 浏览次数:22 分类:技术文章

本文共 5697 字,大约阅读时间需要 18 分钟。

 

目录


创建字符串数组

R2016b 中引入了字符串数组。字符串数组可存储文本片段,并提供一组用于将文本按数据进行处理的函数。可以对字符串数组进行索引、重构和进行串联,就像处理任何其他类型的数组一样。此外,还可以访问字符串中的字符,并使用 plus 运算符向字符串追加文本。要重新排列字符串数组中的字符串,请使用 splitjoin 和 sort 等函数。

根据变量创建字符串数组

MATLAB® 提供字符串数组来存储文本片段。字符串数组的每个元素都包含一个 1×n 字符序列。从 R2017a 开始,可以使用双引号创建字符串。

str = "Hello, world"str = "Hello, world"

作为备选方法,可以使用 string 函数将字符向量转换为字符串。chr 为一个 1×17 字符向量。str 为一个与该字符向量具有相同文本的 1×1 字符串。

hr = '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 array    "Mercury"    "Gemini"      "Apollo"    "Skylab"     "Skylab B"    "ISS"

通过 strlength 函数计算 str 中的每个字符串的长度。使用 strlength 而非 length 来确定字符串中的字符数量。

L = strlength(str)L = 2×3     7     6     6     6     8     3

作为备选方法,可以使用 string 函数将字符向量元胞数组转换为字符串数组。MATLAB 使用双引号显示字符串数组中的字符串,使用单引号显示元胞数组中的字符向量。

C = {'Mercury','Venus','Earth'}C = 1x3 cell array    {'Mercury'}    {'Venus'}    {'Earth'}str = string(C)str = 1x3 string array    "Mercury"    "Venus"    "Earth"

除了字符向量,还可以使用 string 函数将数值、日期时间、持续时间和分类值转换为字符串将数值数组转换为字符串数组。

X = [5 10 20 3.1416];string(X)ans = 1x4 string array    "5"    "10"    "20"    "3.1416"

将日期时间值转换为字符串。

d = datetime('now');string(d)ans = "30-Jul-2019 17:12:01"

此外,也可以使用 readtable、textread、textscan 和 fscanf 函数将文件中的文本读入字符串数组。

创建空字符串和缺失字符串

字符串数组可以包含空值和缺失值。空字符串不包含字符。当显示空字符串时,结果为一对其间不包含任何内容的双引号 ("")。缺失字符串相当于数值数组的 NaN。它指示字符串数组包含缺失值的位置。当显示缺失字符串时,结果为 <missing>,且不带任何引号。

使用 strings 函数创建一个空字符串数组。在不带任何参数的情况下调用 strings 时,将会返回一个空字符串。请注意,str 的大小是 1×1,而不是 0×0。但是,str 不包含字符。

str = stringsstr = ""

使用单引号创建一个空字符向量。请注意,chr 的大小是 0×0。

chr = ''chr =  0x0 empty char array

创建一个所有元素都是空字符串的字符串数组。

str = strings(2,3)str = 2x3 string array    ""    ""    ""    ""    ""    ""

可以使用 strings 函数预分配一个字符串数组。

要创建缺失字符串,请使用 string 函数转换缺失值。缺失字符串显示为 <missing>

str = string(missing)str = 

可以创建同时包含空字符串和缺失字符串的字符串数组。使用 ismissing 函数确定哪些元素为包含缺失值的字符串。请注意,空字符串不是缺失字符串。

str(1) = "";str(2) = "Gemini";str(3) = string(missing)str = 1x3 string array    ""    "Gemini"    
ismissing(str)ans = 1x3 logical array 0 0 1

将一个缺失字符串与另一个字符串进行比较。结果始终为 0 (false),即使您将一个缺失字符串与另一个缺失字符串进行比较也是如此。

str = string(missing);str == "Gemini"ans = logical   0str == string(missing)ans = logical   0

访问字符串数组的元素

字符串数组支持数组运算,例如进行索引和重构。使用数组索引访问 str 的第一行以及所有列。

str = ["Mercury","Gemini","Apollo";       "Skylab","Skylab B","ISS"];str(1,:)ans = 1x3 string array    "Mercury"    "Gemini"    "Apollo"

访问 str 的第二行中的第二个元素。

str(2,2)ans = "Skylab B"

在 str 的边界之外分配一个新字符串。MATLAB 将扩展该数组并使用缺失值填充未分配的元素。

str(3,4) = "Mir"str = 3x4 string array    "Mercury"    "Gemini"      "Apollo"     
"Skylab" "Skylab B" "ISS"
"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   0   0   0   0   0   0   1   0
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 array    "Mercury"    "Gemini"    "Apollo"    "Skylab"    "Skylab B"    "ISS"

转置 str1 和 str2。将它们进行串联,然后将列标题垂直串联到字符串数组上。当您将字符向量串联到字符串数组中时,字符向量会自动转换为字符串。

str1 = str1';str2 = str2';str = [str1 str2];str = [["Mission:","Station:"] ; str]str = 4x2 string array    "Mission:"    "Station:"    "Mercury"     "Skylab"      "Gemini"      "Skylab B"    "Apollo"      "ISS"

向字符串追加文本

要向字符串追加文本,请使用 plus 运算符 +plus 运算符可向字符串追加文本,但不会更改字符串数组的大小。在名字数组中追加一个姓氏。如果将某个字符向量追加到字符串,则该字符向量将自动转换为字符串。

names = ["Mary";"John";"Elizabeth";"Paul";"Ann"];names = names + ' Smith'names = 5x1 string array    "Mary Smith"    "John Smith"    "Elizabeth Smith"    "Paul Smith"    "Ann Smith"

追加不同的姓氏。可以将文本从一个字符串数组或字符向量元胞数组追加到另一个字符串数组。当添加非标量数组时,这些数组的大小必须相同。

names = ["Mary";"John";"Elizabeth";"Paul";"Ann"];lastnames = ["Jones";"Adams";"Young";"Burns";"Spencer"];names = names + " " + lastnamesnames = 5x1 string array    "Mary Jones"    "John Adams"    "Elizabeth Young"    "Paul Burns"    "Ann Spencer"

追加缺失字符串。当您使用加号运算符追加缺失字符串时,输出为一个缺失字符串。

str1 = "Jones";str2 = string(missing);str1 + str2ans = 

拆分、联接和排序字符串数组

MATLAB 提供了一组丰富的函数来处理字符串数组。例如,可以使用 splitjoin 和 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 array    "Mary"         "Jones"      "John"         "Adams"      "Elizabeth"    "Young"      "Paul"         "Burns"      "Ann"          "Spencer"

 names 的列交换位置,使姓在第一列。在每个姓后面添加一个逗号。

names = [names(:,2) names(:,1)];names(:,1) = names(:,1) + ','names = 5x2 string array    "Jones,"      "Mary"         "Adams,"      "John"         "Young,"      "Elizabeth"    "Burns,"      "Paul"         "Spencer,"    "Ann"

将姓和名联接起来。join 函数在它联接的字符串之间放置一个空格字符。进行联接之后,names 为一个 5×1 字符串数组。

names = join(names)names = 5x1 string array    "Jones, Mary"    "Adams, John"    "Young, Elizabeth"    "Burns, Paul"    "Spencer, Ann"

对 names 的元素进行排序,使它们按字母顺序排列。

names = sort(names)names = 5x1 string array    "Adams, John"    "Burns, Paul"    "Jones, Mary"    "Spencer, Ann"    "Young, Elizabeth"

 

 

上一篇:Matlab中有关字符串数组的常见问题解答
下一篇:Matlab中字符串数组和字符数组中的文本

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月11日 21时53分06秒