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

Java正規表現で数字と英字の間にスペースを挿入する方法

正規表現では、パターンの一部を丸括弧 () で囲むことで「キャプチャグループ(マッチグループ)」を作成できます。たとえば、次の正規表現では、第1グループが数字に、第2グループが英字(アルファベット)にそれぞれマッチします。

(\\d)([A-Za-z])

これは、入力文字列の中から「数字の直後に英字が続く部分」にマッチすることを意味します。

置換文字列において $1 は第1グループ、$2 は第2グループへの後方参照を表します。したがって、Stringクラスの replaceAll() メソッドを使ってこの正規表現を $1 $2 に置き換えると、数字の直後に単語が続くすべての箇所へ、自動的にスペースが挿入されます。

サンプルコード

import java.util.Scanner;

public class SampleTest {
    public static void main(String args[]) {
        // ユーザーからの入力を読み込む
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter input text: ");
        String input = sc.nextLine();

        // 数字+英字の並びの間にスペースを挿入
        String result = input.replaceAll("(\\d)([A-Za-z])", "$1 $2");
        System.out.println(result);
    }
}

実行結果

Enter input text:
21This 23is 56sample 99text
21 This 23 is 56 sample 99 text

英字→数字・数字→英字の両方の順序に対応させる方法

同様に、出現順序にかかわらず「数字と英字の間」すべてにスペースを追加したい場合は、次の正規表現を半角スペースに置き換えます。

(?<=[A-Za-z])(?=[0-9])|(?<=[0-9])(?=[A-Za-z])

このパターンで使われているのは、実際の文字を消費しない「ゼロ幅アサーション」です。

  • (?<=[A-Za-z]) … 後読み(ルックビハインド): 直前の文字が英字であることを確認
  • (?=[0-9]) … 先読み(ルックアヘッド): 直後の文字が数字であることを確認

これらを組み合わせることで、「英字と数字の境界」および「数字と英字の境界」のどちらにもマッチでき、元の文字を壊すことなく境界位置だけにスペースを挿入できます。

サンプルコード

import java.util.Scanner;

public class SampleTest {
    public static void main(String args[]) {
        String regex = "(?<=[A-Za-z])(?=[0-9])|(?<=[0-9])(?=[A-Za-z])";

        // ユーザーからの入力を読み込む
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter input text: ");
        String input = sc.nextLine();

        // 文字種の境界位置にスペースを挿入
        String result = input.replaceAll(regex, " ");
        System.out.println(result);
    }
}

実行結果

Enter input text:
21This23is56sample99text
21 This 23 is 56 sample 99 text
  1. JavaのStringBufferとStringBuilderの違いとは?徹底比較

    Javaには、文字列を効率的に操作するための可変(ミュータブル)クラスとしてStringBufferとStringBuilderの2つが用意されています。どちらも文字列の反転や連結といった操作が可能で、Stringのように新しいオブジェクトを生成することなく、既存の文字列を直接変更できるのが特徴です。両者の大きな違いはスレッドセーフ性にあります。StringBufferはスレッドセーフである一方、StringBuilderはスレッドセーフではありません。その分、StringBuilderの方が高速に動作します。また、文字列連結演算子「+」は、内部でStringBufferまたはStringBu

  2. Javaでカウンタープログラムを実装する方法をわかりやすく解説

    この記事では、JavaのSwingを使ってシンプルなカウンター(数を数える)アプリケーションを実装する方法を解説します。このプログラムでは、JLabelでカウント用のラベルを表示し、JTextFieldで現在のカウント値を保持し、JButtonで「追加(Add)」「削除(Remove)」「リセット(Reset)」の3つのボタンを作成します。 「Add」ボタンをクリックするとJTextField内のカウントが1ずつ増加し、「Remove」ボタンをクリックすると1ずつ減少します。さらに「Reset」ボタンをクリックすると、カウントは0にリセットされます。 実装例 import java.awt.*