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

【Java】正規表現の文字クラス \p{javaWhitespace} とは?空白文字にマッチさせる方法

Javaの正規表現における文字クラス \p{javaWhitespace} は、空白文字(ホワイトスペース)にマッチする特殊なクラスです。このクラスは、対象の文字が java.lang.Character クラスの isWhitespace() メソッドに引数として渡されたときに true を返すかどうかを基準に、マッチの可否を判定します。

つまり、半角スペース・タブ・改行コードなど、Javaが「空白」とみなすすべての文字に一致するパターンとして利用できます。

例1:文字列内の空白文字を数える

次のサンプルでは、ユーザーが入力した文字列に含まれる空白文字の個数を、正規表現を使ってカウントします。

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexExample {
   public static void main(String args[]) {
      // ユーザーから文字列を読み込む
      System.out.println("文字列を入力してください");
      Scanner sc = new Scanner(System.in);
      String input = sc.nextLine();

      // 空白文字にマッチする正規表現
      String regex = "[\\p{javaWhitespace}]";

      // 正規表現をコンパイルしてPatternオブジェクトを生成
      Pattern pattern = Pattern.compile(regex);

      // Matcherオブジェクトを取得
      Matcher matcher = pattern.matcher(input);
      int count = 0;
      while(matcher.find()) {
         count++;
      }
      System.out.println("空白文字の数:" + count);
   }
}

実行結果

文字列を入力してください
hello welcome to tutorialspoint
空白文字の数:3

入力された文字列「hello welcome to tutorialspoint」には、単語と単語の間に3つの半角スペースが含まれているため、実行結果は「3」と表示されます。

例2:空白文字だけで構成された文字列を判定する

次の例では、正規表現 ^\p{javaWhitespace}+$ を使って、「空白文字だけで構成された文字列」を判定します。行頭のアンカー(^)と行末のアンカー($)によって、文字列全体が空白のみである場合にだけマッチします。

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Example {
   public static void main( String args[] ) {
      // 空白文字のみで構成される文字列にマッチする正規表現
      String regex = "^\\p{javaWhitespace}+$";

      // 入力データの取得
      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つの文字列を入力してください:
Raju
RAMU
(タブ1文字)
rahman
(半角スペース4文字)
空白文字だけで構成された文字列:
[	]
[    ]

このように、通常の英字列「Raju」や「RAMU」はマッチしませんが、タブや半角スペースだけで構成された入力は正しく検出され、角括弧の中にそのまま出力されます。空白文字は画面上では見えにくいため、デバッグ時にはこのように括弧で囲んで出力すると確認しやすくなります。

まとめ

  • \p{javaWhitespace} は、Character.isWhitespace() が true を返す文字にマッチする。
  • 半角スペース・タブ・改行などの空白文字をまとめて扱える。
  • 文字クラス [\p{javaWhitespace}] で1文字ずつ、^\p{javaWhitespace}+$ で「全体が空白」の判定が可能。
  1. JavaのCharMatcherクラスとは?主要メソッドと使い方を徹底解説

    CharMatcherクラスは、Predicateが任意のObjectに対して真偽値を判定するのと同じように、任意のJavaのchar値に対してtrueまたはfalseを判定するクラスです。Google Guavaライブラリに含まれており、文字単位のマッチングやフィルタリング処理をシンプルかつ直感的に記述できる強力なユーティリティとして知られています。 CharMatcherの主なメソッド 番号メソッドと説明 1CharMatcher and(CharMatcher other)このマッチャーとotherの両方に一致するすべての文字にマッチする、新しいマッチャーを返します。 2sta

  2. JavaのCharacterクラスとは?主要メソッドと使い方を実例付きで解説

    JavaのCharacterクラスは、プリミティブ型 char の値をオブジェクトとしてラップ(包み込む)ためのラッパークラスです。Characterクラスのオブジェクトは、char 型の値を1つだけ格納する単一のフィールドを持っています。 コレクションやジェネリクスなど、オブジェクトしか扱えない場面で char の値を使いたい場合に、このクラスが役立ちます。また、文字が英字か数字かを判定するユーティリティメソッドも数多く提供されています。 Characterクラスの主なメソッド 以下に、Characterクラスでよく使われるメソッドを紹介します。 修飾子と型メソッドと説明 stati