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

Java正規表現のPOSIX文字クラス\p{Lu}とは?大文字の検出・抽出方法を解説

POSIX文字クラス \p{Lu} は、Unicodeの「大文字(Upper case Letter)」カテゴリに属する1文字にマッチする正規表現です。Javaでは Pattern クラスと組み合わせることで、文字列の中から大文字を検索・抽出・カウントできます。

例1:文字列に含まれる大文字の数をカウントする

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example1 {
    public static void main(String args[]) {
        // ユーザーから文字列を入力
        System.out.println("文字列を入力してください");
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        // 正規表現
        String regex = "\\p{Lu}";
        // 正規表現をコンパイルしてPatternオブジェクトを生成
        Pattern pattern = Pattern.compile(regex);
        // Matcherオブジェクトを取得
        Matcher matcher = pattern.matcher(input);
        int count = 0;
        while(matcher.find()) {
            count++;
        }
        System.out.println("大文字の数: "+count);
    }
}

実行結果

文字列を入力してください
Hello HOW are YOU
大文字の数: 7

このプログラムでは、find() メソッドで入力文字列を先頭から順に走査し、\p{Lu} に一致する大文字が見つかるたびにカウントを1つずつ増やしていきます。入力例「Hello HOW are YOU」の場合、「Hello」の H と「HOW」「YOU」の各文字が該当し、合計7個という結果になります。

例2:大文字を含む文字列だけを抽出する

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example2 {
    public static void main(String args[]) {
        // 少なくとも1つの大文字を含む文字列にマッチする正規表現
        String regex = "^.*\\p{Lu}.*$";
        // 入力データを取得
        Scanner sc = new Scanner(System.in);
        System.out.println("5つの文字列を入力してください: ");
        String input[] = new String[5];
        for (int i=0; i<5; i++) {
            input[i] = sc.nextLine();
        }
        // Patternオブジェクトを作成
        Pattern p = Pattern.compile(regex);
        System.out.println("大文字を含む文字列: ");
        for(int i=0; i<5;i++) {
            // Matcherオブジェクトを作成
            Matcher m = p.matcher(input[i]);
            if(m.matches()) {
                System.out.println(m.group());
            }
        }
    }
}

実行結果

5つの文字列を入力してください:
hello how are you
This is SAMPLE text
123 465
TEST DATA
#$% &# *#
大文字を含む文字列:
This is SAMPLE text
TEST DATA

この例では、正規表現 ^.*\p{Lu}.*$ を使用しています。「任意の文字+大文字1字+任意の文字」という構造で、行全体がこのパターンと一致する場合のみ matches() が true を返します。そのため、すべて小文字の文字列や数字・記号のみの文字列は除外され、大文字を1つでも含む文字列だけが出力されます。

\p{Lu} を使う際のポイント

  • \p{Lu} は ASCII の A〜Z だけでなく、アクセント付き文字など各言語の大文字にもマッチします。
  • 小文字だけにマッチしたい場合は \p{Ll} を使用します。
  • Javaの文字列リテラル内ではバックスラッシュをエスケープする必要があるため、"\\p{Lu}" のように記述します。
  • find() は部分一致の繰り返し検索、matches() は文字列全体との一致判定に使われます。
  1. 【Java正規表現】POSIX文字クラス \p{Upper} で大文字英字をマッチングする方法

    POSIX文字クラス \p{Upper} は、大文字の英字(A〜Z)にマッチする正規表現パターンです。Javaの java.util.regex パッケージでは、Pattern クラスや Matcher クラスと組み合わせることで、「文字列がすべて大文字で構成されているかの検証」や「文字列に含まれる大文字の個数カウント」などを簡単に実装できます。 \p{Upper} の基本仕様 \p{Upper} は文字クラス [A-Z] とほぼ同等の働きをし、ASCII範囲の大文字アルファベット1文字にマッチします。Unicode全体を対象にしたい場合は \p{IsUppercase} や \p{Lu} を

  2. Java正規表現のPOSIX文字クラス \p{Lower}とは?小文字マッチの基本と実装例

    POSIX文字クラス \p{Lower} は、正規表現で小文字のアルファベット(a〜z)1文字にマッチさせるためのパターンです。Javaでは Pattern クラスと Matcher クラスを組み合わせて使うことで、「文字列がすべて小文字で構成されているか」の判定や「小文字がいくつ含まれているか」のカウントなど、さまざまなバリデーション処理に活用できます。例1:入力文字列がすべて小文字かどうかを判定する次のサンプルコードでは、正規表現 ^\p{Lower}+$(行頭から行末まで、すべて小文字アルファベット)を使用し、キーボードから入力された5つの文字列の中から、小文字のみで構成されている文字列