【Java】正規表現を使って文字列内の母音を検出する方法
Javaの正規表現では、角括弧 [ ](文字クラス)の中にマッチさせたい文字をまとめて記述できます。このメタ文字「[ ]」は、その中に指定したいずれか1文字に一致することを意味します。
したがって、文字列に母音が含まれているかどうかを調べたい場合は、大文字・小文字の母音をすべて角括弧の中に列挙した次のパターンを使用します。
[aeiouAEIOU]
例1:PatternクラスとMatcherクラスを使う方法
まず Pattern.compile() で正規表現をコンパイルし、Matcher オブジェクトを生成します。そして find() メソッドを呼び出すことで、入力文字列の中にパターンに一致する部分(=母音)が存在するかどうかを判定できます。
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MatchVowels {
public static void main(String args[]) {
String regex = "[aeiouAEIOU]";
System.out.println("文字列を入力してください:");
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
// 正規表現をコンパイルしてMatcherを生成
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
if (matcher.find()) {
System.out.println("入力された文字列には母音が含まれています");
} else {
System.out.println("入力された文字列には母音が含まれていません");
}
}
}実行結果
文字列を入力してください: hello how are you welcome 入力された文字列には母音が含まれています
find() は文字列の一部でもパターンに一致すれば true を返すため、「母音が含まれているか」という判定に適しています。
例2:String.matches()メソッドを使う方法
String クラスの matches() メソッドを使えば、PatternやMatcherを明示的に生成せずに簡潔に記述できます。ただし注意点として、matches() は文字列全体がパターンに一致する場合のみ true を返します。そのため、単純に "[aeiouAEIOU]" を渡すと「1文字だけの母音」でない限り一致しません。
そこで、任意の文字の後に母音が続き、その後また任意の文字が続くことを表す .*[aeiouAEIOU].* というパターンを使用します。
import java.util.Scanner;
public class Test {
public static void main(String args[]) {
// 文字列全体がこのパターンに一致すれば母音を含むことになる
String regex = ".*[aeiouAEIOU].*";
System.out.println("文字列を入力してください:");
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
boolean result = input.matches(regex);
if (result) {
System.out.println("入力された文字列には母音が含まれています");
} else {
System.out.println("入力された文字列には母音が含まれていません");
}
}
}実行結果
文字列を入力してください: hello how are you welcome 入力された文字列には母音が含まれています
find() と matches() の違いまとめ
- find():文字列の一部分だけでもパターンに一致すれば
trueを返す(部分一致)。 - matches():文字列全体がパターンに一致した場合のみ
trueを返す(完全一致)。
用途に応じて両者を使い分けることで、母音の有無チェックだけでなく、さまざまな文字列検証処理を正確に実装できます。
-
Java正規表現のメタ文字「^(キャレット)」の使い方を解説
正規表現におけるサブ式(メタ文字)「^」は、行の先頭にマッチします。この記号を正規表現の中で使用すると、入力文字列の中でその後に続くパターンが行頭から始まる場合に一致とみなされます。 例1:行頭のパターンにマッチするか確認する 次のサンプルコードでは、入力文字列が「Hi how are you」というフレーズで始まっているかどうかを「^」を使って判定しています。 import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexExample { public static void m
-
Javaで文字列内の母音をカウントする方法をわかりやすく解説
Javaでは、拡張forループと条件分岐を組み合わせることで、文字列に含まれる母音(a、e、i、o、u)の数を簡単にカウントできます。この記事では、基本的な実装方法をサンプルコード付きで解説します。 カウントの仕組み まず、カウント用の変数 count を 0 で初期化します。これは、母音の数をこの変数に加算していくためです。 次に、toCharArray() メソッドを使って文字列を1文字ずつ取り出し、Character.toLowerCase() ですべて小文字に変換します。これにより、大文字・小文字を区別せずに母音を判定できるようになります。 for(char ch : myStr.t