使用matlab删除数组中的零字符串

时间:2015-03-01 14:25:05

标签: matlab

我在删除零字符串时遇到问题,所以我有一个生成一个代码的代码 字符串数组:

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'在数组中,我将如何做到这一点?感谢。

2 个答案:

答案 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字符串周围的空格,这些空格会导致原始方法出现非检测问题。因此,您可以strtrimstrcmp一起使用,以获得所需的输出 -

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'