strrep is inconsistent with empty replacement strings
6 次查看(过去 30 天)
显示 更早的评论
I have reported this as a bug. strrep responds differently when the replacement string is various flavors of empty.
'Proper' ways to do this:
x = "abc defg";
>> y = strrep(x,"defg","") % with an empty string object
y =
"abc " % expected result
>> y=strrep(x,'defg','') % with an empty char array
y =
"abc " % same result
y=strrep(x,'defg',char([])) % with an empty char array
y =
"abc " % also same result
One might be tempted to use [ ] or string([ ]) as the replacement string, especially if working with something like a class member that is initialized to empty. But using the first produces the expected result (but with a warning), while using the second unexpectedly clears the entire return value:
>> y = strrep(x,"defg", []) % with an empty array
Warning: Inputs must be character vectors, cell arrays of character vectors, or string arrays.
y =
"abc " % same result, but with warning...
>> y = strrep(x,"defg", string([])) % with an empty string array
y =
0×0 empty string array % ouch! why is this one different?
It would be nice in Matlab would either treat [ ] and string([ ]) the same as "", '' and char( [ ] ), or throw an error so code aborts when handed an unexpected data type.
回答(1 个)
Shivam Sardana
2019-5-29
“string([])” is an empty string array, not a scalar string array with no characters in it. strrep retains the shape of its non-scalar inputs. To get the expected result i.e. "abc ", provide a scalar string with no characters in it:
y = strrep(x,"defg", string(['']))
另请参阅
类别
在 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!