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

Javaの正規表現を使って文字列内の連続するスペースを1つのスペースに置き換える方法

Javaで文字列に含まれる複数の連続スペースを、1つのスペースにまとめて置き換えたい場面はよくあります。正規表現を使えば、この処理をシンプルかつ効率的に実装できます。

正規表現「\s+」の意味

正規表現のメタ文字 \s は、空白文字(半角スペース、タブなど)にマッチします。さらに、直後の + は「直前の要素が1回以上繰り返される」ことを意味します。したがって、\s+ という正規表現は、1つまたは複数の連続する空白文字すべてにマッチします。

この正規表現で入力文字列をマッチングし、マッチした部分を単一のスペース「 」に置き換えることで、余分なスペースを整理できます。

例1:PatternクラスとMatcherクラスを使う方法

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ReplaceAllExample {
    public static void main(String args[]) {
        // ユーザーから文字列を読み込む
        System.out.println("Enter a String");
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        String regex = "\\s+";
        // 正規表現をコンパイル
        Pattern pattern = Pattern.compile(regex);
        // Matcherオブジェクトを取得
        Matcher matcher = pattern.matcher(input);
        // すべての空白文字を単一のスペースに置き換える
        String result = matcher.replaceAll(" ");
        System.out.print("Text after removing unwanted spaces: \n" + result);
    }
}

実行結果

Enter a String
hello this is a sample text with irregular spaces
Text after removing unwanted spaces:
hello this is a sample text with irregular spaces

例2:String.replaceAll()メソッドを使う方法

より簡潔に書きたい場合は、Stringクラスに用意されている replaceAll() メソッドを直接使う方法もあります。内部ではPatternとMatcherと同じ仕組みが使われています。

import java.util.Scanner;
public class Test {
    public static void main(String args[]) {
        // ユーザーから文字列を読み込む
        System.out.println("Enter a String");
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        // 空白(1つ以上)にマッチする正規表現
        String regex = "\\s+";
        // マッチしたパターンを単一のスペースに置き換える
        String result = input.replaceAll(regex, " ");
        System.out.print("Text after removing unwanted spaces: \n" + result);
    }
}

実行結果

Enter a String
hello this is a sample text with irregular spaces
Text after removing unwanted spaces:
hello this is a sample text with irregular spaces

補足ポイント

  • \s は半角スペースだけでなく、タブ(\t)、改行(\n)、復帰(\r)などの空白文字にもマッチします。
  • 文字列内の先頭・末尾の余分なスペースも同時に削除したい場合は、trim() メソッドや strip() メソッド(Java 11以降)と組み合わせると便利です。
  • 全角スペースにも対応したい場合は、正規表現を「[\\s ]+」のように拡張するとよいでしょう。
  1. Javaの正規表現を使って文字列からHTMLタグを抽出する方法

    Javaのjava.util.regexパッケージには、文字シーケンスの中から特定のパターンを検索するためのさまざまなクラスが用意されています。 このパッケージのPatternクラスは、正規表現をコンパイルした結果を表すクラスです。文字列と正規表現のマッチングを行うために、次の2つのメソッドが提供されています。 compile() − 正規表現を表す文字列を引数として受け取り、Patternクラスのオブジェクトを返します。 matcher() − 対象となる文字列を受け取り、その文字列を現在のPatternオブジェクトが表すパターンと照合するためのMatcherオブジェクトを生成します。

  2. Pythonで文字列内のタブを複数のスペースに展開・置換する方法

    Pythonで文字列内のタブを複数のスペースに展開する方法Pythonでは、文字列クラスに標準で用意されている replace() メソッドを使うことで、タブ文字(\t)を任意の数のスペースに簡単に置き換えられます。このメソッドは「置き換え対象の文字列」と「置き換え後の文字列」を引数として受け取り、文字列オブジェクトに対して呼び出します。print(Hello\tWorld\tin\tthis string.replace(\t, ))出力:Hello World in this string上記の例では、各タブ文字が半角スペース4つに置き換えられています。必要に応じ