JavaのCharMatcherクラスとは?主要メソッドと使い方を徹底解説
CharMatcherクラスは、Predicateが任意のObjectに対して真偽値を判定するのと同じように、任意のJavaのchar値に対してtrueまたはfalseを判定するクラスです。Google Guavaライブラリに含まれており、文字単位のマッチングやフィルタリング処理をシンプルかつ直感的に記述できる強力なユーティリティとして知られています。
CharMatcherの主なメソッド
| 番号 | メソッドと説明 |
|---|---|
| 1 | CharMatcher and(CharMatcher other) このマッチャーとotherの両方に一致するすべての文字にマッチする、新しいマッチャーを返します。 |
| 2 | static CharMatcher anyOf(CharSequence sequence) 指定された文字シーケンスに含まれるいずれかの文字にマッチするCharMatcherを返します。 |
| 3 | boolean apply(Character character) 非推奨です。Predicateインターフェースを満たすためだけに提供されているメソッドのため、代わりにmatches(char)を使用してください。 |
| 4 | String collapseFrom(CharSequence sequence, char replacement) 入力された文字シーケンスのコピーを返します。このマッチャーに一致する連続した文字の各グループは、単一の置換文字に置き換えられます。 |
| 5 | int countIn(CharSequence sequence) 文字シーケンス内で見つかった、条件に一致する文字の数を返します。 |
| 6 | static CharMatcher forPredicate(Predicate<? super Character> predicate) 指定されたCharacterベースの述語と同一の動作をするマッチャーを返しますが、こちらはプリミティブ型のcharインスタンスに対して動作します。 |
| 7 | int indexIn(CharSequence sequence) 文字シーケンス内で最初に一致する文字のインデックスを返します。一致する文字が存在しない場合は-1を返します。 |
サンプルコード
それでは、お好みのエディタを使用して、例えば「C:/>Guava」フォルダに以下のJavaプログラムを作成してみましょう。
以下はGuavaTester.javaのコードです。
import com.google.common.base.CharMatcher;
import com.google.common.base.Splitter;
public class GuavaTester {
public static void main(String args[]) {
GuavaTester tester = new GuavaTester();
tester.testCharMatcher();
}
private void testCharMatcher() {
// 数字のみを抽出する
System.out.println(CharMatcher.DIGIT.retainFrom("mahesh123"));
// 前後の空白を取り除き、内部の連続する空白を1つのスペースにまとめる
System.out.println(CharMatcher.WHITESPACE.trimAndCollapseFrom(" Mahesh Parashar ", ' '));
// すべての数字を「*」に置き換える
System.out.println(CharMatcher.JAVA_DIGIT.replaceFrom("mahesh123", "*"));
// 数字または小文字以外の文字を除外する
System.out.println(CharMatcher.JAVA_DIGIT.or(CharMatcher.JAVA_LOWER_CASE).retainFrom("mahesh123"));
}
}
続いて、javacコンパイラを使ってクラスをコンパイルします。
C:\Guava>javac GuavaTester.java
コンパイルが完了したら、GuavaTesterを実行して結果を確認しましょう。
C:\Guava>java GuavaTester
実行結果
このプログラムを実行すると、以下のような出力が得られます。
123 Mahesh Parashar mahesh*** mahesh123
出力内容の解説
- 123:retainFrom()により、「mahesh123」から数字のみが抽出されました。
- Mahesh Parashar:trimAndCollapseFrom()により、前後の空白が除去され、連続する空白が1つのスペースにまとめられました。
- mahesh***:replaceFrom()により、すべての数字が「*」に置き換えられました。
- mahesh123:or()で組み合わせたマッチャーにより、数字と小文字以外の文字が除外されました。
なお、Guavaの比較的新しいバージョンでは、DIGITやJAVA_DIGITといった定数はdigit()やjavaDigit()などの静的ファクトリメソッドへと置き換えられている点に注意してください。
-
Javaの抽象クラスとは?基本ルールと実装例をわかりやすく解説
Javaの抽象クラスとは宣言に「abstract」キーワードを含むクラスは、抽象クラスと呼ばれます。抽象クラスは、継承によって利用されることを前提とした設計用のクラスであり、オブジェクト指向プログラミングにおける重要な概念の一つです。抽象クラスの主な特徴抽象クラスには、抽象メソッド(本体を持たないメソッド。例:public void get();)が含まれる場合もあれば、含まれない場合もあります。ただし、クラス内に1つでも抽象メソッドが存在する場合、そのクラスは必ず abstract として宣言しなければなりません。abstract として宣言されたクラスは、インスタンス化(newによるオブジ
-
Javaのfinalクラスとは?継承を禁止する仕組みと使い方を徹底解説
Javaにおいて、クラスにfinal修飾子を付けて宣言する最大の目的は、そのクラスがサブクラス化(継承)されることを防ぐことです。クラスがfinalとして宣言されると、どのクラスもそのクラスを継承できなくなり、finalクラスの機能や振る舞いを拡張・変更することが不可能になります。finalクラスの基本構文finalクラスの宣言は非常にシンプルです。クラス名の前にfinalキーワードを付けるだけです。public final class Test { // クラスの本体 }このように宣言されたTestクラスに対して、以下のような継承を試みるとコンパイルエラーが発生します。// コンパイ