連載
» 2004年07月12日 09時33分 UPDATE

JAVA DeveloperJava Tips:文字列の部分一致検索を行うには

文字列の検索では,完全一致だけでなく,前方一致や後方一致,部分一致といった条件で検索したい場合があります。ここでは,これら特定条件の文字列検索について解説します。

[JAVA Developer]

部分一致検索はとても簡単

 データベースの文字列データを検索する場合はSQLを利用しますが,ファイルやそのほかのリソースに対して文字列検索を行う場合は,Stringクラスの比較や検索機能を実装したメソッドを利用します。たとえば,文字列が完全に一致するかどうか調べるならequalsメソッドを利用するわけです。実際にプログラムで利用する場合は,完全一致よりも部分的に一致するかどうかを調べることがあります。ここでは,部分一致検索を行うためのメソッドの使い方をまとめて紹介します。

 はじめは前方一致検索です。利用シーンとしては,氏名データに対して名字が一致するか調べたり,電話番号の市外局番が一致するか調べたりする場合が想定されます。前方一致検索を行う場合は,startsWithメソッドを使います。startsWithメソッドの戻り値は,一致した場合はtrue,不一致ならfalseになります。

String s1 = "Stringクラスは文字列を表します。";
String s2 = "String";
 
if (s1.startsWith(s2)) {
    // 前方一致(接頭辞)です
}
else {
    // 前方一致ではありません
}

 次は後方一致検索です。利用シーンとしては,氏名データに対して名前が一致するか調べたり,任意の拡張子がついたファイルを探したりする場合が想定されます。後方一致検索は,endsWithメソッドを使います。戻り値はstartsWithメソッドと同様で,一致した場合はtrue,不一致ならfalseになります。

String s1 = "Stringクラスは文字列を表します。";
String s3 = "String";
 
if (s1.endsWith(s3)) {
    // 後方一致(接尾辞)です
}
else {
    // 後方一致ではありません
}

 ある文字列が別の文字列のなかに含まれているかどうかを調べる場合は,indexOfメソッドを使います。

public int indexOf(String str)

 戻り値は,最初に一致したところの先頭インデックスで,一致しない場合は-1が帰ります。部分一致かどうかを調べるには次のように記述します。

String s1 = "Stringクラスは文字列を表します。";
String s4 = "クラス";
 
if (s1.indexOf(s4) != -1) {
    // 部分一致です
}
else {
    // 部分一致ではありません
}

より高度な検索はmatchesメソッドで

 ここまで紹介した前方一致検索,後方一致検索,部分一致検索は,String#matchesメソッドで正規表現を使っても実現できます。ただし,検索方法が明確な場合は,startsWith,endsWith,indexOfメソッドを使うほうが明示的でわかりやすく,動作のロジックがシンプルなため動作も高速です。

public boolean matches(String regex)

 パラメータの文字列は,含まれているか調べたい文字列ではなく,正規表現を使った検索シーケンスを指定します。たとえば,"クラス"という文字列が含まれているか調べる場合,その文字列の前後に".*"をつけて,次のように記述します。

String s1 = "Stringクラスは文字列を表します。";
String s4 = "クラス";
 
if (s1.matches(".*" + s4 + ".*")) {
    // 部分一致です
}
else {
    // 部分一致ではありません
}

 "."は任意の1文字を意味し,"*"は直前の文字(パターン)が0個以上の場合に一致するというものです。これを,含まれているか調べたい文字列の前後に指定することで,部分一致するかどうかを調べることができます。matchesメソッドのパラメータで利用できる正規表現については,java.sun.comサイトなどで紹介されている情報を参考にしてください。

 「JAVA Developer」より毎週役立つJava Tipsを配信中。ほかにも参考になるTipsは、JAVA Developerサイトのバックナンバーから探すことが可能です。

Copyright(C) 2010 SOFTBANK Creative Inc. All Right Reserved.

ピックアップコンテンツ

- PR -

注目のテーマ

マーケット解説

- PR -