Find if any string in a cell array is contained in a string
Ältere Kommentare anzeigen
I have a cell array of strings, for example, C = {'bob','jack','john'}.
I have a test string T = 'The quick brown jack jumped'.
In this case, I'd like my output to be 2, since 'jack' is contained in T. There is a guarantee that only one string in the cell array will match any part of the test string, i.e. the output will be a single index.
What's the best way to go about implementing this code quickly? I don't want to loop through the cell array and check each time since this function is called as the user types an input in a GUI.
Akzeptierte Antwort
Weitere Antworten (1)
Kirby Fears
am 6 Okt. 2015
Bearbeitet: Kirby Fears
am 7 Okt. 2015
Have you tested the speed of a for-loop or cellfun()? It's probably your best bet here unless C contains a really large number of strings. You can make the computation faster by ordering C from most-likely to least-likely to be typed.
for-loop:
idx=[];
for c=1:numel(C),
temp=regexp(T,C{c},'once');
if ~isempty(temp),
idx=c;
break;
end,
end,
or cellfun:
idx2=find(cellfun(@(c)~isempty(regexp(T,c,'once')),C));
If you involve Java classes, you could possibly speed up string comparisons. However, you can't avoid the need to search for every string in C within T. If C is large enough to try Java code, clever use of an iterable class might be the solution you're looking for.
Hope this helps.
2 Kommentare
TastyPastry
am 6 Okt. 2015
Kirby Fears
am 7 Okt. 2015
Bearbeitet: Kirby Fears
am 7 Okt. 2015
Perhaps the "replacement" part is what's not working. Try setting your KeyPressFcn to replace text with a fixed string like str='mystring' any time a key is pressed to confirm that replacement is working.
Hope this helps.
Kategorien
Mehr zu Characters and Strings finden Sie in Hilfe-Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!