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

Javaの正規表現メタ文字「\s」の使い方を実例付きで解説

Javaの正規表現メタ文字「\s」とは

Javaの正規表現において、メタ文字「\s」は空白文字(半角スペース・タブ・改行など)のいずれか1文字にマッチする特殊な記号です。文字列の中から空白を検索したり、数えたり、置き換えたりしたいときに活躍します。

以下では、2つのサンプルコードを使って「\s」の具体的な使い方を解説します。

サンプル1:空白文字の個数をカウントする

まずは基本形です。PatternクラスとMatcherクラスを使って入力文字列を走査し、find()メソッドがマッチを見つけるたびにカウンターを1ずつ増やしています。

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

public class RegexExample {
    public static void main(String args[]) {
        String regex = "\\s";
        String input = "Hello how are you welcome to Tutorialspoint !";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(input);
        int count = 0;
        while (m.find()) {
            count++;
        }
        System.out.println("マッチした数: " + count);
    }
}

実行結果

マッチした数: 7

入力文字列には空白が7つ含まれているため、結果は7となります。

サンプル2:連続する余分な空白を1つにまとめる

「\s」に量指定子「+」を組み合わせた「\s+」は、1個以上の連続した空白文字にマッチします。これをreplaceAll()メソッドと組み合わせると、不規則な空白をすべて半角スペース1つに整形できます。

次のプログラムは、ユーザーに入力された文字列を読み込み、余分な空白を取り除いて出力します。

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

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

        // 1つ以上の空白文字にマッチする正規表現
        String regex = "\\s+";

        // 正規表現をコンパイルし、Matcherオブジェクトを取得
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);

        // 空白の並びをすべて半角スペース1つに置き換える
        String result = matcher.replaceAll(" ");

        System.out.print("余分な空白を整理した後のテキスト:\n" + result);
    }
}

実行結果

文字列を入力してください
hello  this is    a sample    text with   irregular spaces
余分な空白を整理した後のテキスト:
hello this is a sample text with irregular spaces

このように「\s+」とreplaceAll()を組み合わせると、空白が何文字連続していても1つにまとめられます。ログの整形やユーザー入力の正規化など、実務でも頻繁に使われる定番テクニックなので、ぜひ覚えておきましょう。

  1. Javaの正規表現における$(ドル)メタ文字の使い方

    正規表現におけるサブ表現(メタ文字)「$」は、行の末尾に一致します。パターンの最後に「$」を置くことで、指定した文字列で終わるテキストだけをマッチさせることができます。なお、デフォルトでは「$」は入力全体の末尾に一致しますが、Pattern.MULTILINEフラグを有効にすると、行区切り文字(改行など)の直前にも一致するようになります。例1:行末の一致を確認する次のJavaプログラムでは、「Tutorialspoint」という文字列で終わる入力に対して、正規表現「Tutorialspoint$」が何回一致するかを数えています。import java.util.regex.Matcher; i

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

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