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

Javaの正規表現(RegEx)を使って文字列から空白を削除する方法

Javaでは、正規表現「\\s」を使うことで、文字列内の空白(半角スペース、タブ、改行など)にマッチさせることができます。StringクラスのreplaceAll()メソッドは、第1引数に正規表現、第2引数に置換後の文字列を受け取り、マッチしたすべての文字を指定した文字列に置き換えます。

入力文字列からすべての空白を削除したい場合は、replaceAll()メソッドに正規表現「\\s」と空文字列「""」を引数として渡して呼び出すだけで実現できます。

例1:replaceAll()メソッドで空白を一括削除する

public class RemovingWhiteSpaces {
    public static void main( String args[] ) {
        String input = "Hi welcome to tutorialspoint";
        String regex = "\\s";
        String result = input.replaceAll(regex, "");
        System.out.println("Result: "+result);
    }
}

実行結果

Result: Hiwelcometotutorialspoint

例2:appendReplacement()メソッドを使う方法

同じ処理は、MatcherクラスのappendReplacement()メソッドでも実装できます。このメソッドはStringBufferと置換文字列を引数に取り、マッチした部分を指定した文字列に置き換えながら、その結果をStringBufferへ順番に追加していきます。キーボードから文字列を入力して処理するサンプルコードは以下の通りです。

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

public class RemovingWhiteSpaces {
    public static void main( String args[] ) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter input string: ");
        String input = sc.nextLine();
        String regex = "\\s";
        String constants = "";
        System.out.println("Input string: \n"+input);
        // パターンオブジェクトを作成
        Pattern pattern = Pattern.compile(regex);
        // コンパイル済みパターンを文字列に適用してMatcherを取得
        Matcher matcher = pattern.matcher(input);
        // 空のStringBufferを作成
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            constants = constants+matcher.group();
            matcher.appendReplacement(sb, "");
        }
        matcher.appendTail(sb);
        System.out.println("Result: \n"+ sb.toString()+constants );
    }
}

実行結果

Enter input string:
this is a sample text with white spaces
Input string:
this is a sample text with white spaces
Result:
thisisasampletextwithwhitespaces

例3:split()メソッドで分割して連結する方法

正規表現を使わないアプローチとして、split()メソッドで文字列をスペースで分割し、各要素を順に連結し直す方法もあります。単純なケースでは、こちらの方が処理の流れを直感的に把握しやすいでしょう。

public class Just {
    public static void main(String args[]) {
        String input = "This is a sample text with spaces";
        String str[] = input.split(" ");
        String result = "";
        for(int i=0; i<str.length; i++) {
            result = result+str[i];
        }
        System.out.println("Result: "+result);
    }
}

実行結果

Result: Thisisasampletextwithspaces

まとめ

文字列から空白を削除する最も手軽な方法は、input.replaceAll("\\s", "")のようにreplaceAll()メソッドを呼び出すことです。なお、Javaのデフォルト設定では\\sは全角スペース(U+3000)にはマッチしない点に注意してください。全角空白もまとめて削除したい場合は、Pattern.compile()の第2引数にPattern.UNICODE_CHARACTER_CLASSフラグを指定するか、正規表現に「\u3000」を明示的に加えるとよいでしょう。

  1. Javaの正規表現「\d」とは?数字マッチングの基本と実用例をわかりやすく解説

    Javaの正規表現における部分式(メタ文字)「\d」は、半角数字(0〜9)1文字にマッチするためのパターンです。「d」は「digit(数字)」を意味しており、文字列の中から数値を検索・抽出・検証したい場合に非常に便利な構文です。 なお、「\d」は文字クラス「[0-9]」と同じ意味を持ちます。Javaの文字列リテラル内で正規表現を記述する際は、バックスラッシュ自体がエスケープ文字として扱われるため、コード中では「\\d」のように2重にエスケープして記述する点に注意しましょう。 例1:文字列から数字パターンを検索する 次の例では、入力文字列の中から「数字 + 半角スペース + 24」というパターン

  2. Javaの正規表現「\S」メタ文字の使い方を徹底解説

    Javaの正規表現におけるサブ式(メタ文字)「\S」は、空白以外の文字にマッチします。つまり、スペース・タブ・改行などの空白文字を除いた、すべての文字と一致します。このメタ文字を使うことで、「文字列から空白を除外した文字数をカウントする」「空白を含まないトークンを抽出する」といった処理を簡単に実装できます。例1:\Sにマッチする文字数をカウントする次のサンプルコードでは、入力文字列の中で「\S」にマッチした回数(=空白以外の文字数)をカウントしています。import java.util.regex.Matcher; import java.util.regex.Pattern; public