比较Switch语句/ Matlab中的字符串

时间:2015-04-22 08:01:21

标签: string matlab switch-statement compare

我有一个问题。问题如下: 如何比较Matlab中的String?

我有一个变量,它被称为数据。此变量表示当前存在子字符串时我想要比较的当前字符串。

我有很多不同的可能性,这就是我想使用Switch-Statement的原因。

在代码示例中,您可以看到带有变量的开关"数据"。如果变量包含子串'开始'应执行以下案例。否则"否则"应该使用声明。

我希望你能理解我想做的事。感谢您的帮助和支持。

    function testObj = workflow(testObj, data)



            switch data
                case strfind(data, 'Start')>5
                    disp('Yes')

                case strfind(data, 'End')>10
                    disp('Yes')

                case strfind(data, 'NewTest')>15
                    disp('Yes')

                otherwise
                    disp('No')
            end


        end

文档:

  

切换块有条件地从多个选项中执行一组语句。每个选择都是一个案例。

     

评估的switch_expression是标量或字符串。评估   case_expression是标量,字符串或标量或单元格的数组   字符串。开关模块测试每种情况,直到其中一种情况发生   真正。以下情况属实:

     

对于数字,eq(case_expression,switch_expression)。

     

对于字符串,strcmp(case_expression,switch_expression)。

     

对于支持eq功能的对象,   当量(case_expression,switch_expression)。

     

对于单元格数组case_expression,至少有一个元素   cell数组匹配switch_expression,如上面对数字所定义,   字符串和对象。

     

当一个案例成立时,MATLAB执行相应的语句,并且   然后退出开关块。

     

否则是可选的,只有在没有大小写的情况下才会执行。

2 个答案:

答案 0 :(得分:0)

开关的工作方式不同,正如您所写,您可以在case语句中选择可能需要的完整数据值

switch strfind( data, 'Start') > 5
    case true
        disp( 'Yes')
    otherwise
        disp( 'No')
end

或使用if为此,更短。

答案 1 :(得分:0)

您解释说,您希望在data中搜索的内容字符串有很多种可能性。如果您使用switch data,则始终会使用datastrcmp与其他字符串进行比较。这可能对完成程序的填写没有帮助。任务,因为strcmp比较相等,而不是包含。

如果您不想使用ifelseif等,则一个选项就是循环。将所有可能的字符串保存在单元格数组中,让它调用它compareStrings,并遍历数组。

for ii = 1:length(compareStrings)
  if strfind(data,compareStrings{ii})
    disp('Yes')
    disp (compareStrings{ii})
  end
end