2012-04-30 4 views
4

Я хотел бы получить только начало строки, есть ли эквивалентный matlab, который позволяет говорить: startsWith ('It-is'), как в java?string startWith in Matlab

Благодаря

ответ

6

Вы можете использовать функцию strfind сказать, если одна строка начинается с другой. Функция возвращает начальный индекс каждого вхождения строки, которую вы ищете, или пустой массив, если строка не найдена.

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

Если строка началась с 'It-is' то первый индекс массива, возвращаемого strfind будет 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).

0

Проблема с strfind заключается в том, что он возвращает нескалярный результат, который ограничивает его использование. Более straightfoward будет использовать regexp как так,

s = 'It-is true.'; 
if regexp(s, '^It-is') 
    disp('s starts with "It-is"') 
end 
+0

Я не согласен с комментарием - вы всегда можете обернуть 'strfind' в' isempty', чтобы получить логическое значение. Также хорошо иметь в виду, что реализация MATLAB 'regexp' намного медленнее, чем' strfind'. – mbroshi

+0

@mbroshi, нет, вы не можете. 'isempty (strfind (s, regexp)' всегда истинно, потому что strfind возвращает '{[]}', если он не нашел соответствия. – Temak

+0

Downvoted, потому что 'if regexp (s, '^ It-is')' дает ошибка: > «Преобразование в логическое из ячейки невозможно» – Temak

0

Я хочу добавить, что если 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}.

3

Опция, которая работает лучше для меня:

~isempty(regexp(s, '^It-is', 'once')) 

Команда ~ IsEmpty позволяет использовать выражение с логическими ОШ или Андами, как это:

if ~isempty(regexp(s, '^It-is', 'once')) || ~isempty(regexp(s, '^It-was', 'once')) 

«когда» параметр оптимизацию, чтобы вы не продолжали сканировать строку, как только вы нашли совпадение в начале.