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