オブジェクト指向プログラミング 第7回
正規表現
Javaではjava.util.regexパッケージに正規表現で検索などの機能を提供している。
- 正規表現パターンの文字列を定義する。
- StaticメソッドPattern.maches()を使い、正規表現に一致するかを調べる。
import java.util.regex.Pattern; .... String birthday; ... String regex = "[12][0-9]{3}/(?:0[1-9]|1[0-2])/(?:0[1-9]|[12][0-9]|3[01])"; boolean b = Pattern.maches(regex, birthday);
- [0-9]{3}は[0-9][0-9][0-9]と同じ、x{n}はパターンxをn回繰り返すことを意味する。
- (?:...)は参照なしのグループ化を示す
拡張for文
Java1.5で追加された新しい機能。スクリプト系言語の持つforeach文に相当する。
配列リストlst内のオブジェクトに一つずつアクセスするには次のように記す。lstにはHumanクラスのインスタンスが格納される。
List<Human> lst = new ArrayList<Human>(); ... Human man = new Human("Pop", "1990/01/01"); lst.add(man); ... for(Human m : lst){ System.out.println(m.getName()); .... }
配列リストのソート
Humanクラスの配列リストをソートするにはコンパレータが必要になる。コンパレータはComparatorインターフェースを実装するクラスで定義する。
次のリストは年齢でソートするためのコンパレータクラスである。
import java.util.Comparator; public class AgeSorter implements Comparator { public int compare(Object arg0, Object arg1) { Human h1 = (Human) arg0; Human h2 = (Human) arg1; return h1.getAge() - h2.getAge(); } }
配列リストのソートはCollectionsクラスのStaticメソッドsort()を使う。
AgeSorter ageSorter = new AgeSorter(); Collections.sort(lst, ageSorter);
ソートすることで配列リストの二分木を再構築している。Humanクラスではキーとなるフィールドが複数あるので二分木のノードには値がそのまま入っているのではなく、各オブジェクトへの参照値が格納されている。