【Java】正規表現のPOSIX文字クラス \p{Blank} で空白文字(スペース・タブ)を扱う方法
Javaの正規表現で使えるPOSIX文字クラス \p{Blank} は、半角スペースやタブといった「空白(ブランク)」に該当する文字すべてにマッチします。このクラスを活用すると、文字列中の空白文字の検出・カウントや、空白を含む行の抽出などをシンプルなコードで実現できます。
\p{Blank}の特徴
\p{Blank}がマッチするのは、主に以下の2種類の文字です。
- 半角スペース(U+0020)
- タブ(\t)
なお、改行やフォームフィードなども含む、より広い範囲の空白文字にマッチさせたい場合は \s を使用します。\p{Blank}はあくまで「スペースとタブ」に限定してマッチングを行う点に注意してください。
例1:入力文字列に含まれる空白文字をカウントする
次のプログラムは、ユーザーが入力した文字列から \p{Blank} に該当する文字(スペース・タブ)を順番に検索し、その個数を出力します。
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class BlankCharacters {
public static void main(String args[]) {
// ユーザーから文字列を読み込む
System.out.println("文字列を入力してください");
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
// 空白文字(スペース・タブ)にマッチする正規表現
String regex = "[\\p{Blank}]";
// 正規表現をコンパイルしてPatternオブジェクトを生成
Pattern pattern = Pattern.compile(regex);
// Matcherオブジェクトを取得
Matcher matcher = pattern.matcher(input);
int count = 0;
while (matcher.find()) {
count++;
}
System.out.println("空白文字の数: " + count);
}
}
実行結果
文字列を入力してください space tab test 空白文字の数: 2
入力された「space tab test」には単語間のスペースが2つ含まれているため、結果として「2」が出力されます。
例2:空白文字を含む文字列だけを抽出する
次の例では、^.*\p{Blank}.*$ という正規表現を使い、複数の入力行の中から「空白文字を1つでも含む行」だけを取り出しています。
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{Blank}.*$";
// 入力データを取得
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つの文字列を入力してください: sample data hello welcome to tutorialspoint 12345 ab bc cd da 空白文字を含む文字列: sample data welcome to tutorialspoint ab bc cd da
このように、「hello」「12345」のように空白を含まない文字列は除外され、「sample data」などスペースを含む文字列のみが出力されます。
まとめ
- \p{Blank} はスペースとタブにマッチするPOSIX文字クラスである。
- find() と組み合わせれば、文字列中の空白文字の個数をカウントできる。
- matches() と組み合わせれば、空白を含む(または含まない)文字列の判定・抽出が可能。
-
【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} を
-
Java正規表現のPOSIX文字クラス \p{Lower}とは?小文字マッチの基本と実装例
POSIX文字クラス \p{Lower} は、正規表現で小文字のアルファベット(a〜z)1文字にマッチさせるためのパターンです。Javaでは Pattern クラスと Matcher クラスを組み合わせて使うことで、「文字列がすべて小文字で構成されているか」の判定や「小文字がいくつ含まれているか」のカウントなど、さまざまなバリデーション処理に活用できます。例1:入力文字列がすべて小文字かどうかを判定する次のサンプルコードでは、正規表現 ^\p{Lower}+$(行頭から行末まで、すべて小文字アルファベット)を使用し、キーボードから入力された5つの文字列の中から、小文字のみで構成されている文字列