strsplit:输入类型为'char'的未定义函数

14

我有一个<20x1>的单元数组,每个元素都以字符串形式存储一些数据(至少看起来是这样!)。我想访问单元格的每个元素作为一个独立的字符串,并将其拆分成单词。

我所拥有的单元数组是一个<20x1>的单元数组,要访问每个元素作为一个单元格,我正在使用一个for循环。

for i=1:20
    line=newline{i}
end

它向我展示了数组中的所有元素。由于'line'是一个字符串类型,因此我使用'strsplit'函数来检索字符串中的单词。

for i=1:20
   words(i,:)=strsplit(line)
end

这给了我一个错误信息:

??? Undefined function or method 'strsplit' for input
arguments of type 'char'.

Error in ==> chk at 15
words=strsplit(newline{i})

能否有人解释一下我错在哪里?非常感谢提前。


1
有几件事情需要澄清,以下命令的输出是什么:s = newline{1}; whos newline s; which -all strsplit。同时请记住,strsplit 的输出将是一个单元数组。 - Amro
命令的输出是换行符中第一个单元格中的字符串:`ans =YELLOW SMALL STRETCH ADULT T` 我需要将这些单词提取到一个数组中。 - BajajG
是的,但这仍然不够信息。你看,MATLAB可能会以相似的方式打印字符串和包含字符串的单元数组,这就是为什么我要求您发布这些命令的精确输出...此外,'strsplit'可能会被工作区中具有相同名称或完全不同的变量所遮盖。函数/脚本。 - Amro
我发布了确切的输出。我从命令窗口复制了输出,然后粘贴在这里。而且我的工作区中没有同名的变量。 - BajajG
1个回答

22

我的猜测是你正在使用R2013a版本之前的Matlab。尽管它们是通用函数,应该很久以前就添加了,但strsplitstrjoin只在最新版本中添加

如果你只想将字符串拆分成单词且所有空格都是简单空格,有几种方法可以避免使用strsplit。你可以像这样使用strread

strread(line,'%s','delimiter',' ')

然而,textscan 应该更加健壮:

textscan(line,'%s')

使用regexp应该也是稳健的,但速度可能会较慢:

regexp(line,'\s+','split')

所有这些函数的输出结果都是字符串单元格数组(即您的单词),就像strsplit一样。与其他函数相比,textscan的输出结果是转置的。


是的,你说得对!我正在使用Matlab R2010a。而且谢谢..strread正好按照我想要的方式工作。 :) - BajajG
Matlab建议使用textscan而不是strsplit。 - uutsav
2
@UtsavSinha:你的链接是关于 strread 函数的文档。而这个问题和答案是关于 strsplit 函数的,它是一个完全不同的函数。 - horchler
感谢@horchler指出。我想说的是strread而不是strsplit - uutsav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接