博客
关于我
Matlab中有关字符串数组的常见问题解答
阅读量:345 次
发布时间:2019-03-04

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

 

有关字符串数组的常见问题解答

MATLAB® 在 R2016b 中引入了 string 数据类型。从 R2018b 开始,可以使用字符串数组处理 MathWorks® 产品中的文本。字符串数组可存储文本片段,并提供一组用于将文本按数据进行处理的函数。可以对字符串数组进行索引、重构和进行串联,就像处理任何其他类型的数组一样。有关详细信息,请参考创建字符串数组。

字符串数组的行为大多数方面与字符向量和字符向量元胞数组类似。但是,字符串数组和字符数组之间存在一些关键差异,这些差异可能会导致意外的结果。对于所有这些差异,按推荐的方法来使用字符串,便可获得预期的结果。

为什么在命令形式中使用字符串会返回错误?

以命令形式使用 cddircopyfile 或 load 等函数时,应避免使用双引号。在命令形式中,放在双引号中的参数可能会导致错误。要将参数指定为字符串,请使用函数形式。

对于命令语法,应该用空格而不是逗号来分隔输入,而且不需要将输入参数放在括号中。例如,可以将 cd 函数与命令语法结合使用来更改文件夹。

cd C:\Temp

文本 C:\Temp 是一个字符向量。在命令形式中,所有参数都始终为字符向量。如果有一个包含空格的参数(例如文件夹名称),请将其放在单引号中以作为一个输入参数来指定

cd 'C:\Program Files'

但是,如果使用双引号指定参数,cd 将引发错误。

cd "C:\Program Files"
Error using cdToo many input arguments.

根据使用的函数和指定的参数,错误消息可能有所不同。例如,如果将 load 函数与命令语法结合使用,并使用双引号来指定参数,则 load 将引发不同的错误。

load "myVariables.mat"
Error using loadUnable to read file '"myVariables.mat"': Invalid argument.

在命令形式中,双引号被视为字面文本的一部分,而不是字符串构造运算符。如果以函数形式编写等效的 cd "C:\Program Files",则它看起来会像是在用两个参数调用 cd

cd('"C:\Program','Files"')

以字符串形式指定参数时,请使用函数语法。支持命令语法的所有函数也支持函数语法。例如,可以将 cd 与函数语法结合使用,并以带双引号的字符串形式指定输入参数。

cd("C:\Program Files")

为什么元胞数组中的字符串返回错误?

如果有多个字符串,请将它们存储在字符串数组而不是元胞数组中。使用方括号而不是花括号创建字符串数组。在存储和操作文本方面,字符串数组比元胞数组更高效。

str = ["Venus","Earth","Mars"]str = 1×3 string array    "Venus"    "Earth"    "Mars"

请避免使用字符串元胞数组。如果使用元胞数组,便意味着您放弃了使用字符串数组带来的性能优势。事实上,大多数函数都不接受将字符串元胞数组作为输入参数、选项或者作为名称-值对组的值。例如,如果指定字符串元胞数组作为输入参数,则 contains 函数将引发错误。

C = {"Venus","Earth","Mars"}C = 1×3 cell array    {["Venus"]}    {["Earth"]}    {["Mars"]}
TF = contains(C,"Earth")
Error using containsFirst argument must be a string array, character vector, or cell array of character vectors.

这种情况下,应以字符串数组形式指定参数。

str = ["Venus","Earth","Mars"];TF = contains(str,"Earth");

在 R2016b 之前,术语“字符串元胞数组”是指其元素全部为字符向量的元胞数组。但是,为了与字符串数组区分开来,将这类元胞数组称为“字符向量元胞数组”更为准确。元胞数组可以包含任何数据类型的变量,包括字符串。仍然可以创建其元素全部为字符串的元胞数组。而且,如果已经在代码中指定字符向量元胞数组,则将单引号替换为双引号可能看起来就像一次简单的更新。但是,不建议创建或使用字符串元胞数组。

为什么使用 length() 调用字符串会返回 1?

length 函数通常用于确定字符向量中的字符数。但是,要确定字符串中的字符数,请使用 strlength 函数,而不是 length

使用单引号创建一个字符向量。要确定其长度,请使用 length 函数。由于 C 是向量,因此它的长度等于字符数。C 是一个 1×11 向量。

C = 'Hello world';L = length(C)L = 11

使用双引号创建具有相同字符的字符串。虽然它存储 11 个字符,但 str 是一个 1×1 字符串数组,或者说字符串标量。如果使用 length 调用字符串标量,则无论它存储多少个字符,输出参数都为 1

str = "Hello World";L = length(str)L = 1

要确定字符串中的字符数,请使用在R2016b中引入的 strlength 函数。为了实现兼容性,strlength 仍然可用于字符向量。在这两种情况下,strlength 都返回字符数。

L = strlength(C)L = 11L = strlength(str)L = 11

strlength 还可用于包含多个字符串的字符串数组以及字符向量元胞数组。

length 函数返回数组的最长维度的大小。对于字符串数组,length 返回数组最长维度的字符串的数量,而不返回字符串内的字符数。

为什么 isempty("") 返回 0?

一个字符串可以不包含任何字符。这样的字符串称为空字符串。可以使用一对不包含任何内容的双引号来指定空字符串。

L = strlength("")L = 0

但是,空字符串并不是空数组。空字符串是刚好没有任何字符的字符串标量。

sz = size("")sz = 1×2         1     1

如果对空字符串调用 isempty,将返回 0 (false),因为它并不是空数组。

tf = isempty("")tf = logical   0

但是,如果对空字符数组调用 isempty,则返回 1 (true)。用一对空单引号 '' 指定的字符数组是一个 0×0 字符数组。

tf = isempty('')tf = logical   1

要测试一段文本是否不包含任何字符,最佳做法是使用 strlength 函数。无论输入是字符串标量还是字符向量,都可以使用相同的调用。

str = "";if strlength(str) == 0    disp('String has no text')endString has no textchr = '';if strlength(chr) == 0    disp('Character vector has no text')endCharacter vector has no text

为什么使用方括号追加字符串返回多个字符串?

可以使用方括号在字符向量后面追加文本。但是,如果使用方括号向字符串数组添加文本,新文本将作为字符串数组的新元素进行串联。要为字符串追加文本,请使用plus运算符或strcat函数。

例如,如果串联两个字符串,则结果是一个 1×2 字符串数组。

str = ["Hello" "World"]str = 1×2 string array    "Hello"    "World"

但是,如果串联两个字符向量,则结果是一个更长的字符向量。

str = ['Hello' 'World']chr = 'HelloWorld'

要为字符串(或字符串数组的元素)追加文本,请使用 plus 运算符而不是方括号。

str = "Hello" + "World"str = "HelloWorld"

另外,也可以使用 strcat 函数。无论输入参数是字符串还是字符向量,都可以使用 strcat 追加文本。

str = strcat("Hello","World")str = "HelloWorld"

不管使用方括号、plus 还是 strcat,都可以指定任意数量的参数。在 Hello 和 World 之间追加一个空白字符。

str = "Hello" + " " + "World"str = "Hello World"

 

转载地址:http://hbcr.baihongyu.com/

你可能感兴趣的文章
python pexpect
查看>>
inode索引节点的概念
查看>>
python时间格式转换time模块
查看>>
文件校验
查看>>
python can i use return in wiht statement?
查看>>
coddenomicon工具
查看>>
create-react-app第一步
查看>>
testng测试工具简介
查看>>
mysql查看数据库状态
查看>>
怎么去利用已有的数据做分析?
查看>>
小程序开发之第三天
查看>>
某易游戏经典吃豆豆动画404页面源码
查看>>
专升本——英语视频学习
查看>>
Future education software
查看>>
C语言——经典200道实例【基础例题100道——进阶例题100道】
查看>>
数据结构——线性表&树&图的【数据元素名称-有无结点-内部之间的关系】的区别
查看>>
不知道考研各科课程那个老师的课好?怎么选择安排?在哪找课程课本资料?看这里
查看>>
考研高数一_高数二_高数三考试大纲
查看>>
【无线传感器网络简明教程-学习笔记8】第八章 无线传感器网络试验
查看>>
【考研高数-高等数学-基础】第四章 不定积分
查看>>