Я хотел бы получить только начало строки, есть ли эквивалентный matlab, который позволяет говорить: startsWith ('It-is'), как в java?string startWith in Matlab
Благодаря
Я хотел бы получить только начало строки, есть ли эквивалентный matlab, который позволяет говорить: startsWith ('It-is'), как в java?string startWith in Matlab
Благодаря
Вы можете использовать функцию 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)
.
Проблема с strfind заключается в том, что он возвращает нескалярный результат, который ограничивает его использование. Более straightfoward будет использовать regexp как так,
s = 'It-is true.';
if regexp(s, '^It-is')
disp('s starts with "It-is"')
end
Я хочу добавить, что если s является клетка, то регулярное выражение и 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
возвращение cell array с пустой ячейкой {[]}
. Чтобы получить доступ к первой ячейке, вам понадобится экранжер брекетов оператора pos{1,1}
.
Опция, которая работает лучше для меня:
~isempty(regexp(s, '^It-is', 'once'))
Команда ~ IsEmpty позволяет использовать выражение с логическими ОШ или Андами, как это:
if ~isempty(regexp(s, '^It-is', 'once')) || ~isempty(regexp(s, '^It-was', 'once'))
«когда» параметр оптимизацию, чтобы вы не продолжали сканировать строку, как только вы нашли совпадение в начале.
Я не согласен с комментарием - вы всегда можете обернуть 'strfind' в' isempty', чтобы получить логическое значение. Также хорошо иметь в виду, что реализация MATLAB 'regexp' намного медленнее, чем' strfind'. – mbroshi
@mbroshi, нет, вы не можете. 'isempty (strfind (s, regexp)' всегда истинно, потому что strfind возвращает '{[]}', если он не нашел соответствия. – Temak
Downvoted, потому что 'if regexp (s, '^ It-is')' дает ошибка: > «Преобразование в логическое из ячейки невозможно» – Temak