我在删除零字符串时遇到问题,所以我有一个生成一个代码的代码 字符串数组:
a =['29.74473' ' 0'
'42.56682' '75.38116'
'52.79034' ' 0'
'61.77224' '16.23368'
'70.04864' ' 0'
' 77.9089' '40.75286'
'93.09803' '16.60231'
'100.7078' ' 0'
'100.7078' ' 0']
我想删除包含' 0'的行字符串,所以我使用了这段代码:
a(strcmp(a(:,2),' 0'),:) = [];
但它并没有删除那些' 0'在数组中,我将如何做到这一点?感谢。
答案 0 :(得分:1)
使用[]
而不是{}
,您正在构建一个9-by-16
char数组,而不是包含字符串的9-by-2
单元数组。这就是strcmp
没有返回字符串完美匹配的原因。
您想要的是通过以下方式构建a
a = {...
'29.74473' ' 0'
'42.56682' '75.38116'
'52.79034' ' 0'
'61.77224' '16.23368'
'70.04864' ' 0'
' 77.9089' '40.75286'
'93.09803' '16.60231'
'100.7078' ' 0'
'100.7078' ' 0'}
答案 1 :(得分:1)
您可以使用strtrim
删除示例输入中看到的0
字符串周围的空格,这些空格会导致原始方法出现非检测问题。因此,您可以strtrim
与strcmp
一起使用,以获得所需的输出 -
a_out = a(~any(strcmp(strtrim(a),'0'),2),:)
或
a_out = a(all(~strcmp(strtrim(a),'0'),2),:)
或者使用regexprep
,您可以将strtrim(a)
替换为regexprep(a,'[^\w'']','')
。
示例运行 -
a =
'29.74473' ' 0'
'42.56682' '75.38116'
'52.79034' ' 0'
'61.77224' '16.23368'
'70.04864' ' 0'
' 77.9089' '40.75286'
'93.09803' '16.60231'
'100.7078' ' 0'
'100.7078' ' 0'
a_out =
'42.56682' '75.38116'
'61.77224' '16.23368'
' 77.9089' '40.75286'
'93.09803' '16.60231'