Problem with the use of strrep command
17 次查看(过去 30 天)
显示 更早的评论
I have a problem with strrep command. I have noticed that this command no use for cell array with square bracket character ([])
Could you please help me?
3 个评论
Askic V
2023-3-6
Here is one example with cell array with square brackets and use of strrep function:
aa = {['first'],['second']}
aa
aa(1) = strrep(aa(1),'first','replacement');
aa
Can you explain what problem could be here?
DGM
2023-3-6
编辑:DGM
2023-3-6
In that case, the square brackets have no influence over the processing.
aa = {['first'],['second']}
is the same as
aa = {'first','second'}
Since we're guessing here, other interpretations might include:
% an unintended concatenation
aa = {['first','second']}
... or
% the brackets are within the char vectors
aa = {'first [subexpr]','second [other subexpr]'}
Where either the brackets themselves are to be replaced (shouldn't be a problem), or the subexpressions therin are to be replaced (strrep would be the wrong tool).
Alternatively, my guess is that this might not even be a cellchar
% a cell of strings or string arrays might cause problems
aa = {"first" "second"}
aa = {["first" "second"]}
in which case the solution really depends on what's in the cell array, how it's arranged, and whether it should even be in a cell array.
But we'll have to wait.
回答(1 个)
Steven Lord
2023-3-6
That is correct, when called with a cell array with some char vectors in the cells as input strrep requires each element of that cell array to be a char vector. I'm using try / catch here so I can run code after the section that throws the error.
a = {'apple', [], 'cherry'}
try
strrep(a, 'e', 'E')
catch ME
fprintf("This call threw error '%s'.\n", ME.message)
end
Use cellfun or a for loop to replace the empty numeric elements with an empty char array.
E = cellfun(@isempty, a);
a(E) = {''}
strrep(a, 'e', 'E')
3 个评论
Steven Lord
2023-3-7
More likely than not the code that generated the variable a did not explicitly assigned an empty vector into it, so it's easy to overlook that possibility.
a = {'apple'}
a{3} = 'cherry'
MATLAB needed to put something into the second cell in the variable a when I assigned 'cherry' into the third cell. It essentially chose []. In this case where I knew I wanted all the cells to have text data I might have preallocated the cell array with repmat to ensure all cells had some text data. That's not so much preallocating for memory (cells in a cell array are not required to be contiguous in memory like elements in a numeric array) but more preallocating with the expected types.
b = repmat({''}, 1, 3)
b{1} = 'apple'
b{3} = 'cherry'
strrep(b, 'e', 'E')
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Characters and Strings 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!