Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

Java Regex: เพิ่ม Space ระหว่างตัวเลขและคำ

ใช้ capturing groups แยกตัวเลขและตัวอักษร แล้วแทนที่ด้วย $1 $2 (group 1 + space + group 2)

วิธีที่ 1: จับคู่ digit ตามด้วย letter

import java.util.Scanner;

public class SampleTest {
    public static void main(String args[]) {
        String regex = "(\\d)([A-Za-z])";
        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

วิธีที่ 2: Lookaround (รองรับ 2 ทิศทาง)

เพิ่ม space ระหว่างตัวเลขและตัวอักษร ไม่ว่าจะเป็นตัวเลขหน้าตัวอักษร หรือตัวอักษรหน้าตัวเลข:

import java.util.Scanner;

public class SampleTest {
    public static void main(String args[]) {
        // (?<=[A-Za-z])(?=[0-9]) | (?<=[0-9])(?=[A-Za-z])
        // หลังตัวอักษรหน้าตัวเลข | หลังตัวเลขหน้าตัวอักษร
        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

อธิบาย Lookaround

Regex (?<=[A-Za-z])(?=[0-9])|(?<=[0-9])(?=[A-Za-z]) จับคู่ ตำแหน่ง (zero-width) ระหว่าง letter-digit หรือ digit-letter แล้วแทนที่ด้วย space

ข้อแตกต่าง

Patternชื่อความหมาย
(?<=X)Positive Lookbehindต้องมี X ก่อนหน้า (ไม่ consume)
(?<!X)Negative Lookbehindต้องไม่มี X ก่อนหน้า
(?=X)Positive Lookaheadต้องมี X ถัดไป (ไม่ consume)
(?!X)Negative Lookaheadต้องไม่มี X ถัดไป
วิธีRegexรองรับหมายเหตุ
Capturing groups(\\d)([A-Za-z])digit → letterConsume ตัวอักษร ต้องใช้ $1 $2
Lookaround(?<=\\d)(?=[A-Za-z])|...ทั้ง 2 ทิศทางZero-width ไม่ consume ใช้ replaceAll(" ")

ข้อจำกัด Lookbehind ใน Java

  • Java 8: lookbehind ต้องเป็น fixed-length (ไม่รองรับ *, + ภายใน)
  • Java 9+: รองรับ limited variable-length lookbehind
  • (?<=[A-Za-z]) OK (fixed 1 char)
  • (?<=\\d+) Error ใน Java 8