MATLAB相当于Python的string.join()

时间:2011-12-16 16:49:06

标签: matlab

在Python中,我可以轻松地加入字符串列表的内容,用一组字符分隔,这样:

>>> L = ["A","B","C"]
>>> string.join(L,"_")
'A_B_C'

在MATLAB中,我可以用这种方式连接字符串的单元格数组:

>> L = {'A','B','C'};
>> [L{:}] % or strcat(L{:}), with trimming of trailing spaces

ans =

ABC

MATLAB中是否有简单的命令模仿string.join添加分隔符的能力?

我知道这可以通过奇怪的构造来完成,例如

[sprintf('%s_',L{1:end-1}), L{end}]

除其他外,还有一种更简单的方法吗?

3 个答案:

答案 0 :(得分:5)

我认为MATLAB中没有像string.join这样的内置函数。你对sprintf的陈述可能是最好的方法。

这是另一个更新的FileExchange提交 - STRJOIN。它可能是基于@ BenH的答案的JOIN。

答案 1 :(得分:2)

编辑:从Matlab 2013a开始,有一个名为strjoin

的内置函数

我不知道任何内置方式,但我现在使用它(我假设您想要连接'单元格字符串'并且您不想丢失尾随空格):

L = {' A',' B ','C '};
delimiter = '/';
append_delimiter = @(in) [in delimiter];
tmp = cellfun(append_delimiter, L(1:end-1), 'UniformOutput', false);
result = horzcat(tmp{:}, L{end})

>>> ans =

A B C 

或者,与功能相同:

function joined_str = strjoin(in_strings, delimiter)
    assert(iscellstr(in_strings), 'strjoin:cellstr', '1st argument: cell string');
    assert(ischar(delimiter) && (isvector(delimiter) || isempty(delimiter)), ...
           'strjoin:string', '2nd argument: string');

    append_delimiter = @(in) [in delimiter];
    appended = cellfun(append_delimiter, in_strings(1:end-1), 'UniformOutput', false);
    joined_str = horzcat(appended{:}, in_strings{end});
end

>> strjoin({' A ', ' B ', ' C '}, '_')

ans =

 A _ B _ C 

答案 2 :(得分:0)

您可能对文件交换中找到的[join]感兴趣(http://www.mathworks.com/matlabcentral/fileexchange/4872)。