Combine Strrep in one Line.

2 次查看(过去 30 天)
Hi, is there any way that i Combine strrep as one line in my Code for different values. for example.
a = strrep(a, 'x','y'); a = strrep(a, 'z','w');

采纳的回答

KL
KL 2017-11-30
use replace with cell arrays,
a = 'abcxyz'
old = {'x';'z'};
new = {'y';'w'};
a = replace(a, old,new)
  3 个评论
KL
KL 2017-11-30
sorry, that does not work for me
What does it mean? Do you get an error message?
My guess would be that you're using a matlab version older than 2016b. Anywayt try regexprep,
a = regexprep(a, old,new);
FishermanJack
FishermanJack 2017-11-30
编辑:FishermanJack 2017-11-30
yes, thanks,regexprep does the Job very well. :D

请先登录,再进行评论。

更多回答(1 个)

Jan
Jan 2017-11-30
编辑:Jan 2017-11-30
has = 'xy';
rep = 'zw';
[Lia, Locb] = ismember(a, has);
a(Lia) = rep(Locb);
[EDITED] I assume strrep has less overhead. For many changes, a lookup table will be more efficient:
function s = StrRepList(s, old, new)
if numel(old) < 20 % GUESSED limit!
for k = 1:numel(old)
s = strrep(s, old(k), new(k));
end
else
lut = char(0):char(255);
lut(old + 1) = new;
s = lut(s + 1);
end
end
Some tests with tic/toc will help to find a suitable limit to decide for a strrep loop or a lookup table method. Maybe it depends on the size of s also.
  2 个评论
FishermanJack
FishermanJack 2017-11-30
i will try this because regexprep is much slower than strrep..
FishermanJack
FishermanJack 2017-12-4
i implented this in my Code, but as i see with tic/toc the most efficient way is with strrep. thank you anyway

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 String Parsing 的更多信息

标签

产品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by