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 ]+」のように拡張するとよいでしょう。
-
Javaの正規表現を使って文字列からHTMLタグを抽出する方法
Javaのjava.util.regexパッケージには、文字シーケンスの中から特定のパターンを検索するためのさまざまなクラスが用意されています。 このパッケージのPatternクラスは、正規表現をコンパイルした結果を表すクラスです。文字列と正規表現のマッチングを行うために、次の2つのメソッドが提供されています。 compile() − 正規表現を表す文字列を引数として受け取り、Patternクラスのオブジェクトを返します。 matcher() − 対象となる文字列を受け取り、その文字列を現在のPatternオブジェクトが表すパターンと照合するためのMatcherオブジェクトを生成します。
-
Pythonで文字列内のタブを複数のスペースに展開・置換する方法
Pythonで文字列内のタブを複数のスペースに展開する方法Pythonでは、文字列クラスに標準で用意されている replace() メソッドを使うことで、タブ文字(\t)を任意の数のスペースに簡単に置き換えられます。このメソッドは「置き換え対象の文字列」と「置き換え後の文字列」を引数として受け取り、文字列オブジェクトに対して呼び出します。print(Hello\tWorld\tin\tthis string.replace(\t, ))出力:Hello World in this string上記の例では、各タブ文字が半角スペース4つに置き換えられています。必要に応じ