2

私は次のようにかなり基本的な文字列照合テストを行っています:

if(msList.indexOf(textChoice) != -1)

これは、探しているサブ文字列(textChoice)がアスタリスクで終わる場合があることを除いて、うまく機能します。次に、文字列内のアスタリスクが文字列内の文字ではなく演算子として解釈されるため、誤った一致が発生することになります。

では、このテストを実行して、サブ文字列内のアスタリスクが通常の文字として扱われるようにするにはどうすればよいですか?

PS。簡単な答えは「サブ文字列にアスタリスクを含めないでください」ですが、アスタリスクは私が使用しているデータに含まれています。アスタリスクを取り除くことはできません。

4

1 に答える 1

3

サブストリング内のすべての文字は通常の文字として扱われます。*は特別な演算子ではなく、の動作を変更することはありませんindexOf。さらに、indexOfメソッドは決して戻りませんfalse。戻ります:

  • -1一致するものが見つからない場合、または
  • 見つかった場合、一致する部分文字列の開始インデックス

0開始インデックスは、部分文字列検索のfalseと等しくない場合があることに注意してください。これは、文字列の先頭に部分文字列が見つかったことを意味します。

"ABC".indexOf("AB") // 0

-1真の値をチェックするだけでなく、戻り値をと比較する明示的なチェックを行います。

if("ABC".indexOf("AB")) {
    // will never execute
}

代わりに、常にこれを行ってください。

if("ABC".indexOf("AB") != -1) {
   // ..
}
于 2010-07-20T22:55:39.357 に答える