如何在Matlab中对这个字符串拆分函数进行矢量化

时间:2011-03-12 23:47:57

标签: matlab

如何在Matlab中对此strsplit函数进行矢量化以使其运行得更快?谢谢

function parts = strsplit(splitstr, str)
  splitlen = length(splitstr);
  k = strfind(str, splitstr);
  parts = cell(length(k)+1, 1);
  s = 1;

  if isempty(k)
    parts{1} = str;
    return
  end

  for i=1:length(k)
    parts{i} = str(s : k(i)-1);
    s = k(i) + splitlen ;
  end

  parts{end} = str((k(end) + splitlen) : end); 

2 个答案:

答案 0 :(得分:6)

您可以通过拨打TEXTSCAN替换您的功能。

str = 'testxyztest2xyztest3';
splitStr = 'xyz';
out = textscan(str,'%s','delimiter',splitStr,'multipleDelimsAsOne',1)
out{1}
ans = 
    'test'
    'test2'
    'test3'

答案 1 :(得分:2)

您可以使用regexp(另请注意该页面上的example on string splitting):

out = regexp(str, regexptranslate('escape', splitStr), 'split');

regexptranslate函数转义拆分字符串,以便将其视为文字字符串而不是正则表达式。