Javaのmatchesメソッドについて
JavaのStringクラスには、文字列が指定された正規表現に一致するかどうかを判断するためのmatches()メソッドがあります。このメソッドは正規表現を使用したパターンマッチングに役立ちます。
matches()メソッドの構文
matches()メソッドは、次の形式で呼び出されます:
public boolean matches(String regex)
このメソッドは、文字列が引数として渡された正規表現(regex)に一致する場合にtrueを返し、一致しない場合にfalseを返します。
基本的な使用例
次に、matches()メソッドの基本的な使用例を示します。
public class MatchesExample {
public static void main(String[] args) {
String str = "hello";
// 正規表現に一致するか確認
boolean result = str.matches("hello");
System.out.println(result); // 出力: true
result = str.matches("h.*o");
System.out.println(result); // 出力: true
result = str.matches("h.*l");
System.out.println(result); // 出力: false
}
}
上記の例では、文字列 str
が正規表現に一致するかどうかを確認しています。
正規表現の基本
正規表現(regex)は、特定のパターンに文字列が一致するかどうかを検証するための言語です。matches()メソッドで使用される正規表現の基本的な構文をいくつか示します。
.
: 任意の1文字*
: 直前の文字が0回以上繰り返される+
: 直前の文字が1回以上繰り返される?
: 直前の文字が0回または1回だけ現れる[abc]
: a、b、cのいずれか1文字[a-z]
: aからzまでのいずれか1文字\\d
: 数字\\w
: 単語文字(英数字およびアンダースコア)^
: 行の先頭$
: 行の末尾
これらの構文を使用して、柔軟なパターンマッチングを実現できます。
応用的な使用例
matches()メソッドを使用した応用例をいくつか紹介します。
public class AdvancedMatchesExample {
public static void main(String[] args) {
String str;
// 数字だけの文字列を判定
str = "12345";
System.out.println(str.matches("\\d+")); // true
// メールアドレスの形式をチェック
str = "example@example.com";
String emailRegex = "^[\\w.%+-]+@[\\w.-]+\\.[a-zA-Z]{2,6}$";
System.out.println(str.matches(emailRegex)); // true
// 英単語のみかチェック
str = "helloWorld";
System.out.println(str.matches("[a-zA-Z]+")); // true
// 電話番号の形式をチェック(例: 123-456-7890)
str = "123-456-7890";
String phoneRegex = "\\d{3}-\\d{3}-\\d{4}";
System.out.println(str.matches(phoneRegex)); // true
// 日本の郵便番号をチェック(例: 123-4567)
str = "123-4567";
String postalCodeRegex = "\\d{3}-\\d{4}";
System.out.println(str.matches(postalCodeRegex)); // true
}
}
上記の例では、様々な正規表現を使用して、文字列が特定のパターンに一致するかを検証しています。
パフォーマンスの注意点
matches()メソッドを使用する際のパフォーマンスについて考慮するべき点があります。
- 正規表現の複雑さ: 正規表現が複雑になるほど、処理に時間がかかる場合があります。
- 頻繁な呼び出し: matches()メソッドを大量のデータに対して頻繁に呼び出す場合、効率が低下する可能性があります。その場合は、
Pattern
とMatcher
を使用してパターンを事前にコンパイルすることを検討してください。
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class OptimizedMatchingExample {
public static void main(String[] args) {
String str = "example@example.com";
String regex = "^[\\w.%+-]+@[\\w.-]+\\.[a-zA-Z]{2,6}$";
// パターンを事前にコンパイル
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
// 一致を確認
System.out.println(matcher.matches()); // true
}
}
まとめ
Javaのmatches()メソッドは、文字列が特定の正規表現に一致するかを簡単に確認できる便利なツールです。基本的な使い方から応用例まで幅広く使用可能ですが、パフォーマンスを考慮した適切な使い方も重要です。