2011-12-16 42 views
9

在Python中,我可以很容易地加入字符串列表中的內容,通過一組字符隔開,這樣說:MATLAB相當於Python的的string.join()

>>> 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}] 

等等來完成,但有一個更簡單的方法?

+6

+1爲「四不像結構」。對我來說夠好! – 2012-09-19 08:36:04

+1

Matlab 2016有`join({'A','B','C','D'},',')` – Eric 2016-11-27 13:28:03

回答

4

我不認爲有像MATLAB中的string.join這樣的內置函數。您的sprintf聲明可能是如何完成的最佳方式。

這是另一個更新的FileExchange提交 - STRJOIN。它可能基於@ BenH的答案加入。

+0

謝謝。這不是一個單一的命令,但strjoin看起來非常通用。 – foglerit 2011-12-16 19:24:55

0

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

+0

謝謝。該呈件的存在可能告訴我,我的問題的答案是「不」。 – foglerit 2011-12-16 18:06:47

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