2011-12-16 15 views
9

In Python, posso facilmente unire il contenuto di una lista di stringhe, separate da un insieme di caratteri, in questo modo:MATLAB equivalente a string.join di Python()

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

In MATLAB, posso concatenare un array di celle di stringhe in questo modo:

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

ans = 

ABC 

c'è semplice comando in MATLAB che imita la capacità di string.join di aggiungere un carattere separatore?

Sono consapevole che questo può essere fatto attraverso costrutti grotteschi, come

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

tra gli altri, ma c'è un modo più semplice?

+6

+1 per il "costrutto grottesca". Abbastanza buono per me! –

+1

Matlab 2016 ha 'join ({'A', 'B', 'C', 'D'}, ',')' – Eric

risposta

4

Non penso che esista una funzione built-in come string.join in MATLAB. La tua affermazione con sprintf è probabilmente il modo migliore per farlo.

Ecco un'altra presentazione FileExchange più recente - STRJOIN. Probabilmente era basato su JOIN dalla risposta di @ BenH.

+0

Grazie. Non è un singolo comando, ma sembra molto versatile. – foglerit

0

Potrebbe essere interessato a [join] trovato nello scambio di file (http://www.mathworks.com/matlabcentral/fileexchange/4872).

+0

Grazie. L'esistenza di quella sottomissione probabilmente mi dice che la risposta alla mia domanda è "no". – foglerit

2

Edit: Da Matlab 2013a in là è una funzione built-in chiamato strjoin

io non conosco alcun modo built-in, ma io uso questo ora (sto supponendo che si desidera concatenare un 'stringa di celle' e che non si vuole perdere gli spazi finali):

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 

Oppure, lo stesso di una funzione:

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 
+1

Questo è per "grottesco" come "grottesco" per "carino". –