How does the function contains behave ??

7 ビュー (過去 30 日間)
Owen Zhang
Owen Zhang 2019 年 4 月 24 日
コメント済み: Owen Zhang 2019 年 4 月 24 日
Today I'm fixing a bug, because of using contains() function.
There is a condition check whether the input string is exactly in an string array ["Parameter Only","Process Only"]:
The logic is like :
if contains(errtype, ["Parameter Only","Process Only"])
% do something if errtype is any of "Parameter Only","Process Only"
else
% do something if not
end
And what the function "contains" really behaves are out of my expectation, see following test:

採用された回答

Stephen23
Stephen23 2019 年 4 月 24 日
編集済み: Stephen23 2019 年 4 月 24 日
The contains function behaves exactly as I would expect, based on its documentation, which states "If pattern is an array containing multiple patterns, then contains returns 1 if it finds any element of pattern in str". Note that it checks if the pattern is in the string (i.e. is part of the string), not if it is equal to the whole string as you seem to think.
For your examples (which you unfortunately uploaded as screenshots, rather than sensibly as text):
  1. The text contains the 1st pattern -> true
  2. The text contains the 2nd pattern -> true
  3. The text does not contain either pattern -> false
  4. The text contains the 2nd pattern -> true
  5. The text does not contain either pattern -> false
So far it is behaving exactly as I would expect. The only problem is that you picked the wrong function for your needs.
Based on your explanation you should be using strcmp or strcmpi, rather than contains:
if any(strcmpi(errtype, ["Parameter Only","Process Only"]))
Or, if errtype is also string class, simply use == and any. Or use switch rather than if.
  1 件のコメント
Owen Zhang
Owen Zhang 2019 年 4 月 24 日
thank you.
== is easy and clean.
if any(errtype == ["Parameter Only","Process Only"])

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeCharacters and Strings についてさらに検索

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by