Java
 Computer >> コンピューター >  >> プログラミング >> Java

【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 を返す(完全一致)。

用途に応じて両者を使い分けることで、母音の有無チェックだけでなく、さまざまな文字列検証処理を正確に実装できます。

  1. Java正規表現のメタ文字「^(キャレット)」の使い方を解説

    正規表現におけるサブ式(メタ文字)「^」は、行の先頭にマッチします。この記号を正規表現の中で使用すると、入力文字列の中でその後に続くパターンが行頭から始まる場合に一致とみなされます。 例1:行頭のパターンにマッチするか確認する 次のサンプルコードでは、入力文字列が「Hi how are you」というフレーズで始まっているかどうかを「^」を使って判定しています。 import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexExample { public static void m

  2. Javaで文字列内の母音をカウントする方法をわかりやすく解説

    Javaでは、拡張forループと条件分岐を組み合わせることで、文字列に含まれる母音(a、e、i、o、u)の数を簡単にカウントできます。この記事では、基本的な実装方法をサンプルコード付きで解説します。 カウントの仕組み まず、カウント用の変数 count を 0 で初期化します。これは、母音の数をこの変数に加算していくためです。 次に、toCharArray() メソッドを使って文字列を1文字ずつ取り出し、Character.toLowerCase() ですべて小文字に変換します。これにより、大文字・小文字を区別せずに母音を判定できるようになります。 for(char ch : myStr.t