我想只得到字符串的开头,是否有一个等效的matlab允许说:startsWith('It-is')就像在java中一样?
由于
答案 0 :(得分:8)
您可以使用strfind
函数判断一个字符串是否以另一个字符串开头。该函数返回您要查找的每个字符串的起始索引,如果找不到该字符串,则返回一个空数组。
S = 'Find the starting indices of the pattern string';
strfind(S, 'It-is')
如果字符串以'It-is'
开头,则strfind
返回的数组的第一个索引将为1(即第一个字符的索引)。
答案 1 :(得分:3)
对于长字符串,执行此操作会更快
s = (numel(a)>=numel(b)) && all(a(1:min(numel(a),numel(b)))==b(1:min(numel(a),numel(b))));
以使其等效于a.startsWith(b)
。
答案 2 :(得分:3)
最适合我的选项是:
~isempty(regexp(s, '^It-is', 'once'))
~isempty允许您使用具有逻辑OR或AND的表达式,如下所示:
if ~isempty(regexp(s, '^It-is', 'once')) || ~isempty(regexp(s, '^It-was', 'once'))
'一次'参数是一种优化,可确保您在开始时找到匹配后不再扫描字符串。
答案 3 :(得分:0)
strfind的问题在于它返回非标量结果,这限制了您可以使用它的位置。更直接的是使用regexp之类的,
s = 'It-is true.';
if regexp(s, '^It-is')
disp('s starts with "It-is"')
end
答案 4 :(得分:0)
我想补充一点,如果s是一个单元格,那么regexp和strfind会返回cell array。
在这种情况下,您可以使用以下两种变体之一:
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
或strfind
的返回值转换为bool,因为它们会返回如果没有匹配项,则regexp
和strfind
会返回{ {3}}空单元格{[]}
。要访问第一个单元格,您需要向我们发出支撑操作符pos{1,1}
。
答案 5 :(得分:0)
从Matlab2016b开始,有一个startsWith函数:
startsWith(your_string, 'It-is')
在以前的版本中,您可以使用Bill the Lizard's answer来实现自己的功能:
matches = strfind(your_string, 'It-is');
string_starts_with_pattern = ~isempty(matches) && matches(1) == 1;