5

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

谢谢

4

6 回答 6

8

您可以使用该strfind函数来判断一个字符串是否以另一个字符串开头。该函数返回您要查找的字符串每次出现的起始索引,如果未找到该字符串,则返回一个空数组。

S = 'Find the starting indices of the pattern string';
strfind(S, 'It-is')

如果字符串以 开头,'It-is'则返回的数组的第一个索引为strfind1(即第一个字符的索引)。

于 2012-05-01T12:20:26.070 回答
3

对于长字符串,这样做更快

s = (numel(a)>=numel(b)) && all(a(1:min(numel(a),numel(b)))==b(1:min(numel(a),numel(b))));

为了有等价于a.startsWith(b)

于 2013-09-15T15:02:31.983 回答
3

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.

于 2016-02-25T12:33:56.773 回答
0

strfind 的问题在于它返回一个非标量结果,这限制了您可以使用它的位置。更直接的方法是像这样使用正则表达式,

s = 'It-is true.';
if regexp(s, '^It-is')
  disp('s starts with "It-is"')
end
于 2014-07-28T14:57:17.167 回答
0

我想补充一点,如果 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

您不能直接将regexpor的返回值strfind转换为 bool,因为如果没有匹配项,它们会返回,regexpstrfind返回一个带有空单元格的单元格数组{[]}。要访问第一个单元格,您需要使用大括号运算符pos{1,1}

于 2015-06-20T12:13:27.150 回答
0

从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;
于 2018-09-21T13:37:59.627 回答