MATLAB Answers


Find index of cells containing my string

Asked by New
on 25 Feb 2011
Latest activity Commented on by Cameron Kimbrough on 10 Oct 2016 at 3:08

Hi, I have a cell aray (40,000X1)in which every cell contains a string. I would like to find the indexes of the cells containing a specific string.

I used the following:

Index = strfind(Mycellarray, 'Bla');

I get the following error: ??? Error using ==> cell.strfind at 35 If any of the input arguments are cell arrays, the first must be a cell array of strings and the second must be a character array.

What is wrong, in the help file strfind accepts cell arrays and a pattern...?

Thank you


on 25 Feb 2011

Thank you for your answers. I used C2 = [C{:}] as advised but then still trying to get the list of Indices I used:
Index = strfind(C2,'bla')
I get a cell array in which every cell is either empty [] or 1 but no list of indices.

on 22 Feb 2013

I found out that if the cell has empty indexes it wont work. Example:

a =


>> strfind(a,'hey')

??? Error using ==> cell.strfind at 35 If any of the input arguments are cell arrays, the first must be a cell array of strings and the second must be a character array.

>> a{3} = 'letsGo'

a =


>> strfind(a,'hey')

ans =


It is not considered as a cell string if all the cells in the array have a string in them.

Jan Simon
on 22 Feb 2013

@Felipe: Exactly. A cell is a cell string, if it contains strings only. And STRFIND works on strings and cell strings only.


No products are associated with this question.

7 Answers

Jan Simon
Answer by Jan Simon
on 25 Feb 2011
Edited by Jan Simon
on 16 Apr 2016
 Accepted answer

Do you want to search for the string 'bla' inside each string of the cell array, or should the cell element be 'bla' exactly? The answering would be easier, if you explain this detail.

If 'bla' should be part of the string:

IndexC = strfind(C, 'bla');
Index = find(not(cellfun('isempty', IndexC)));

If the string should be excatly 'bla': See Jos' answer.


Possibly bla might occur multiple times and the indices of all of the positions is what is desired?

on 3 Nov 2012

A little correction to Jan's answer:

   IndexC = strfind(C, 'bla'); % not C2

No need to convert C into string from cell : C2 = [C{:}];

Answer by Matt B
on 14 Nov 2013

I realize this question is old now, but a simple way of doing this is to define an inline function:

cellfind = @(string)(@(cell_contents)(strcmp(string,cell_contents)));

You can then use this with cellfun to return a boolean value for each element of the cell. For example:

logical_cells = cellfun(cellfind('foo'),cell_array)
logical_cells = 

  1 Comment

on 27 Feb 2016

Great answer. Works very well.

Answer by Jos (10584)
on 25 Feb 2011

So, your original array was a cell array of cells with a single string. Use STRCMP and FIND to get the indices of the cells with a cell containing the specified string

C = { {'a'}, {'b'}, {'c'}, {'a'}, {'a'} } % data
idx = find(strcmp([C{:}], 'a')) % single line engine


Answer by Jay
on 28 May 2016
Edited by Jay
on 28 May 2016

This worked for me:

idx = find(ismember(C, 'bla'))


Great! Works clean. Thanks.

Nice, just what I was looking for.

Answer by Jan Simon
on 25 Feb 2011

You can check if your cell is a cell string:


This displays the indices and contents of the non-strings:

Index = find(~cellfun('isclass', Mycellarray, 'char'))

Another idea is, that some strings are multi-row CHAR matrices:

Index = find(cellfun('size', Mycellarray, 1) > 1)


Answer by Peter Farkas
on 9 May 2016

You can also explicitelly define the index matrix:

[rw, ~] = size(cellArray);

ind = [1:1:rw];

idx = strcmp(cellArray, stringToSearchFor);

yourResult = ind(idx);

It is kind of verbose, if you review the code in 2 years time, you will still know what is going on.


Answer by Mukesh Jadhav
on 9 Oct 2016 at 11:22

Haven't tested but this should work fine.

word_to_find=strfind(strarray,'stringtofind'); starray.index(word_to_find);


Join the 15-year community celebration.

Play games and win prizes!

Learn more
Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

MATLAB Academy

New to MATLAB?

Learn MATLAB today!