字符串startsWith在Matlab中

时间:2012-04-30 11:10:48

标签: string matlab-deployment

我想只得到字符串的开头,是否有一个等效的matlab允许说:startsWith('It-is')就像在java中一样?

由于

6 个答案:

答案 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

您无法直接将regexpstrfind的返回值转换为bool,因为它们会返回如果没有匹配项,则regexpstrfind会返回{ {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;