2012-04-30 14 views
4

私は文字列の初めだけを取得したいと思いますが、等価なmatlabがあると言うことができます:startsWith( 'It-is')はJavaのようですか?文字列startでMatlab

おかげ

答えて

6

あなたは1つの文字列が別で始まっている場合伝えるためにstrfind機能を使用することができます。関数は、探している文字列のそれぞれの開始インデックスを返します。文字列が見つからない場合は空の配列を返します。ストリングが'It-is'で開始した場合

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

次いでstrfindによって返される配列の最初のインデックスは、(第1の文字の、すなわちインデックス)であろう。長い文字列の場合

3

a.startsWith(b)と同等のを持っているために、この

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

を行うために高速です。

0

strfindの問題は、スカラーではない結果が返され、使用できる場所が制限されることです。もっとstraightfowardはそうのようregexpを使用することであろう、

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

私はコメントに同意しません - あなたはいつも 'isempty'に' strfind'をラップしてブール値を得ることができます。また、 'regexp'のMATLAB実装が' strfind'よりはるかに遅いことを覚えておいてください。 – mbroshi

+0

@mbroshi、そうではありません。 – Temak

+0

'' regexp(s、 '^ It-is') 'が返された場合、' {[]} 'が返されるので' isempty(strfind(s、regexp) 'は常にtrueです。エラー: > "セルからの論理への変換ができません" – Temak

0

私はsが、セルその後、正規表現であるとcell arrayを返すstrfind場合ことを追加します。ある場合、彼らは返すので、あなたが直接、ブール値に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 


あなたは、この場合の二つの変種のいずれかを使用することができます一致するものがない場合、regexpおよびstrfindは、を空のセル{[]}で返します。最初のセルにアクセスするには、私たちに必要な中括弧演算子pos{1,1}が必要です。私にとって最高の作品

3

オプションは次のとおりです。

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

「一度は」パラメータは次のとおりです。

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

〜のisEmptyは、あなたがこのような論理的論理和または論理積で表現を使用することができます初めに一致を見つけたら、文字列をスキャンし続けることを確実にする最適化。

関連する問題