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

目录

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

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

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

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

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

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


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

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

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

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

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

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

cd C:\Temp

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

cd 'C:\Program Files'

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

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

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

load "myVariables.mat"
Error using load
Unable 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 contains
First 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 = 11


L = 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')
end

String has no text


chr = '';
if strlength(chr) == 0
    disp('Character vector has no text')
end

Character 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"

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值