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

ดึงรายการจับคู่ทั้งหมดใน Java Regex

Java ไม่มีเมธอดสำเร็จรูปสำหรับดึงรายการจับคู่ทั้งหมด ต้องใช้ List เก็บผลลัพธ์ในลูป while

ตัวอย่าง: หาตัวเลขทั้งหมดในข้อความ

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

public class ListOfMatches {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter input text: ");
        String input = sc.nextLine();
        String regex = "\\d+";
        
        Pattern pattern = Pattern.compile(regex);
        ArrayList<String> list = new ArrayList<>();
        
        Matcher matcher = pattern.matcher(input);
        while (matcher.find()) {
            list.add(matcher.group());
        }
        
        Iterator<String> it = list.iterator();
        System.out.println("List of matches:");
        while (it.hasNext()) {
            System.out.println(it.next());
        }
    }
}

ผลลัพธ์

Enter input text: sample 1432 text 53 with 363 numbers
List of matches:
1432
53
363

อธิบาย

  • ใช้ ArrayList<String> เก็บผลลัพธ์จาก matcher.group()
  • วนลูป while (matcher.find()) หาจับคู่ทั้งหมด
  • ใช้ Iterator แสดงผล (หรือใช้ for-each loop ก็ได้)

วิธีทันสมัยกว่า (Java 8+)

// ใช้ Stream API
Pattern pattern = Pattern.compile("\\d+");
List<String> matches = pattern.matcher(input)
    .results()
    .map(MatchResult::group)
    .collect(Collectors.toList());

สรุป

รูปแบบมาตรฐาน: คอมไพล์ Pattern → สร้าง Matcher → while(find()) → add to List