在MATLAB中为字符串数组strfind

时间:2011-11-08 19:41:55

标签: string matlab whitespace

我有一个单元格数组x,每行都是一个字符串数组。 例如,

>>ab = x{2};
>>ab
ans =
  910        Flow’S Equation

显然,这个字符串有一个模式:数字值和文本字符串由一些空格分隔。关于这个例子,当我输入

>> ab(2)
  ans =
    1
>> ab(3)
  ans =
    0
>> ab(6)
  ans =
    F

在我的代码中,我需要自动检查文本字符串的起始位置,即“F”的起始位置和数值的结束位置,即“0”的起始位置。我用

>> x = strfind(ab, ' ');

对于这个例子,我希望它给我“空间”的位置

  
    

4 5 12

  

相反,它只给了我12而没有输出4和5

我认为问题是ab的第四和第五个条目不是“空格”,我怎么知道它们是什么?当我输入

>> ab(4)
 ans =

输出什么都没有,就像“空间”一样?

2 个答案:

答案 0 :(得分:2)

要找出char ab(4)是什么,请通过

将char转换为数字形式
double( ab(4) )

对于double(ab(4))=9,它是TAB。如果您的字符串是ASCII,您可能需要检查ASCII control charactersASCII printable characters以获取映射。

但是,要查找文本字符串的开头,使用regexp可能是个更好的主意:

string_begin = min( regexp(ab, '[^\d\s]') )

regexp(ab, '[^\d\s]')返回既不是数字也不是空格的所有字符的位置,并且位置的最小值应该是文本开始的位置。

答案 1 :(得分:0)

尝试:

double(ab(4))

这可能是一个不可打印的ascii角色

另一种可以看到变量内容的方法是

sprintf('[%d]',sprintf('Some\n\r\ttext'))
ans =

[83][111][109][101][10][13][9][116][101][120][116]

或在你的情况下

ans =

sprintf('[%d]', ab );

如果您尝试在字符串中查找由空格或制表符分隔的单词,则可以使用:

regexp(x{2},'[\t ]','split')