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」を明示的に加えるとよいでしょう。
-
Javaの正規表現「\d」とは?数字マッチングの基本と実用例をわかりやすく解説
Javaの正規表現における部分式(メタ文字)「\d」は、半角数字(0〜9)1文字にマッチするためのパターンです。「d」は「digit(数字)」を意味しており、文字列の中から数値を検索・抽出・検証したい場合に非常に便利な構文です。 なお、「\d」は文字クラス「[0-9]」と同じ意味を持ちます。Javaの文字列リテラル内で正規表現を記述する際は、バックスラッシュ自体がエスケープ文字として扱われるため、コード中では「\\d」のように2重にエスケープして記述する点に注意しましょう。 例1:文字列から数字パターンを検索する 次の例では、入力文字列の中から「数字 + 半角スペース + 24」というパターン
-
Javaの正規表現「\S」メタ文字の使い方を徹底解説
Javaの正規表現におけるサブ式(メタ文字)「\S」は、空白以外の文字にマッチします。つまり、スペース・タブ・改行などの空白文字を除いた、すべての文字と一致します。このメタ文字を使うことで、「文字列から空白を除外した文字数をカウントする」「空白を含まないトークンを抽出する」といった処理を簡単に実装できます。例1:\Sにマッチする文字数をカウントする次のサンプルコードでは、入力文字列の中で「\S」にマッチした回数(=空白以外の文字数)をカウントしています。import java.util.regex.Matcher; import java.util.regex.Pattern; public