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

พิมพ์ตัวอักษรทั้งหมดของสตริงด้วย Regex ใน Java

Metacharacter . (จุด) จับคู่ ทุกตัวอักษร ยกเว้น newline (โดย default)

เพื่อพิมพ์ตัวอักษรทั้งหมดด้วย regex:

  1. คอมไพล์ regex ด้วย Pattern.compile()
  2. สร้าง Matcher ด้วย matcher()
  3. วนลูป find() และพิมพ์ group() ทุกครั้ง

ตัวอย่าง

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexExample {
    public static void main(String args[]) {
        String regex = ".";
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter your input string: ");
        String input = sc.nextLine();
        
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(input);
        
        while (m.find()) {
            System.out.println(m.group());
        }
    }
}

ผลลัพธ์

Enter your input string: This is a sample text
T
h
i
s

i
s

a

s
a
m
p
l
e

t
e
x
t

อธิบาย

  • . จับคู่ตัวอักษรเดี่ยวทุกตัว (รวม space, punctuation, ตัวเลข)
  • find() หาต่อไปเรื่อยๆ จนจบสตริง
  • แต่ละครั้งจับคู่ได้ 1 ตัวอักษร → พิมพ์แต่ละบรรทัด

ตัวเลือกเพิ่มเติม

วิธีง่ายกว่า (ไม่ใช้ Regex)

// แปลงเป็น char array
for (char c : input.toCharArray()) {
    System.out.println(c);
}

// หรือใช้ Stream (Java 8+)
input.chars().forEach(c -> System.out.println((char)c));

สรุป

Regex . เหมาะสำหรับการประมวลผลตัวอักษรทีละตัว พร้อมเงื่อนไขซับซ้อน แตสำหรับแค่วนลูปพิมพ์ ใช้ toCharArray() หรือ chars() จะเร็วและอ่านง่ายกว่า

Regexจับคู่หมายเหตุ
.ทุกตัวอักษร ยกเว้น newlineDefault behavior
(?s). หรือ Pattern.DOTALLทุกตัวอักษร รวม newlineSingle-line mode
\\SNon-whitespaceข้าม space, tab, newline
\\wWord character [a-zA-Z0-9_]ตัวอักษร ตัวเลข underscore