# Finding Strings

Over the years, MATLAB has become a friendlier environment for working with character information. MATLAB has a rich set of text handling functions, ranging from the simple, to the all-powerful regexp functionality (covered here). I'm going to cover a few of the simple and very useful string functions today.

### Use strfind

Use strfind instead of findstr or find for string searches.

• Preferred
             strfind('abc','a')
• Not recommended
             findstr('abc','a')

This usage is a bit slower potentially and may cause confusion since there is no way to know which string was found in the other one.

• Not recommended
             find('abc'=='a')

This usage is about 5 times slower than strfind, and is not robust, since it only works if one of the arguments to == is scalar.

• Benefits
      - Speed improvement, less memory (no temporary for results of logical statement inside find
- No ambiguity on which string to index into later, if desired
- Code is robust compared to using FIND which can't handle as general a case, nor is FIND as fast.

### Use strrep

Use strrep instead of replacing values via indexing.

• Preferred (removing blanks from a string)
             str = strrep(str,' ','')
• Not recommended
             ind = find(str==' '); str(ind) = []
str(str==' ') = []
• Preferred (remove & from strings, e.g., menu accelerators)
             str = strrep(str,'&','')
• Not recommended
             menuLabelStr(find(menuLabelStr=='&')) = []
• Benefits
      - speed
- more general, i.e., replacement strings don't need to be the same
size (or empty) as the strings they replace

### Use strncmp

Use strncmp instead of strmatch with literal second input.

• Preferred
             strncmp(str,'string',length(str))
• Not recommended
             strmatch(str,'string')
• Not recommended
             strmatch(str,'string','exact')
• Benefits
      - speed
• Note
      - strmatch returns indices where the string is found, while strncmp
returns true/false, so upgrading code requires more than just copy/paste.

### Use strcmpi

Use strcmpi instead of using strcmp with upper or lower.

• Preferred
             strcmpi(str,'lcstring')
• Not recommended
             strcmp(lower(str),'lcstring')
• Benefits
      - speed
- fewer function calls
- fewer temporary variables
- readability

### Use ismember

Use ismember to vectorize string finding operations.

• Preferred
             pets = {'cat';'dog';'dog';'dog';'giraffe';'hamster'}
species = {'cat' 'dog'}
[tf, loc] = ismember(pets, species)
• Not recommended
             locs = zeros(length(pets),1);
for k = 1:length(species)
tf =  strcmp(pets, species(k));
locs(tf) = k;
end
• Benefits
      - speed
• Note
      - strfind works on cell arrays of strings and returns results
in a cell array, with relevant indices.  It does partial matching.
- ismember requires an exact match.  The outputs are different
than strfind's, so coding is not just a matter of direct
substitution.

### Summary

I've talked about a few simple string functions available in MATLAB. Do you have some simple string recommendations for users? Post your ideas here.

Published with MATLAB® 7.3

|