我只想得到 string 的开头,是否有一个等效的 matlab 可以说:startsWith('It-is') 就像在 java 中一样?
谢谢
我只想得到 string 的开头,是否有一个等效的 matlab 可以说:startsWith('It-is') 就像在 java 中一样?
谢谢
您可以使用该strfind
函数来判断一个字符串是否以另一个字符串开头。该函数返回您要查找的字符串每次出现的起始索引,如果未找到该字符串,则返回一个空数组。
S = 'Find the starting indices of the pattern string';
strfind(S, 'It-is')
如果字符串以 开头,'It-is'
则返回的数组的第一个索引为strfind
1(即第一个字符的索引)。
对于长字符串,这样做更快
s = (numel(a)>=numel(b)) && all(a(1:min(numel(a),numel(b)))==b(1:min(numel(a),numel(b))));
为了有等价于a.startsWith(b)
。
The option that works best for me is:
~isempty(regexp(s, '^It-is', 'once'))
The ~isempty allows you to use the expression with logical ORs or ANDs like this:
if ~isempty(regexp(s, '^It-is', 'once')) || ~isempty(regexp(s, '^It-was', 'once'))
The 'once' parameter is an optimization to ensure you don't keep scanning the string once you have found the match at the beginning.
strfind 的问题在于它返回一个非标量结果,这限制了您可以使用它的位置。更直接的方法是像这样使用正则表达式,
s = 'It-is true.';
if regexp(s, '^It-is')
disp('s starts with "It-is"')
end
我想补充一点,如果 s 是一个单元格,那么 regexp 和 strfind 返回一个单元格数组。
在这种情况下,您可以使用两种变体之一:
pos = strfind(s, 'It-iss');
if (~isempty(pos{1,1}))
disp('s starts with "It-is"')
end
或者
pos = regexp(s, '^It-is');
if (~isempty(pos{1,1}))
disp('s starts with "It-is"')
end
您不能直接将regexp
or的返回值strfind
转换为 bool,因为如果没有匹配项,它们会返回,regexp
并strfind
返回一个带有空单元格的单元格数组{[]}
。要访问第一个单元格,您需要使用大括号运算符pos{1,1}
。
从Matlab2016b开始,有一个startsWith函数:
startsWith(your_string, 'It-is')
在以前的版本中,您可以使用Bill the Lizard 的答案来制作自己的功能:
matches = strfind(your_string, 'It-is');
string_starts_with_pattern = ~isempty(matches) && matches(1) == 1;