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

แยกตัวเลขจาก String ใน Java ด้วย Regular Expressions

การแยกวิเคราะห์ String และดึงข้อมูลที่ต้องการออกมาเป็นทักษะสำคัญที่นักทดสอบ (Tester) ควรมี โดยเฉพาะเมื่อทดสอบ API และต้องแยกข้อมูลจาก JSON หรือ XML response ในบทความนี้เราจะมาดูวิธีแยกตัวเลขหรือตัวเลขหลายหลักจาก String ด้วย Java Regex กันครับ

แยกตัวเลขทั้งหมดจาก String

ใช้ Pattern \\d+ เพื่อจับกลุ่มตัวเลขติดกัน

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

public class RegexExamples {
    public static void main(String[] args) {
        Pattern p = Pattern.compile("\\d+");
        Matcher m = p.matcher("string1234more567string890");
        while (m.find()) {
            System.out.println(m.group());
        }
    }
}

ผลลัพธ์:

1234
567
890

แยกตัวเลขลำดับที่ N จาก String

ถ้าต้องการแค่กลุ่มตัวเลขลำดับที่ 2 (เช่น 567 จาก string1234more567string890) ให้ใช้ Capturing Group

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

public class RegexExamples {
    private static final Pattern p = Pattern.compile("[^\\d]*[\\d]+[^\\d]+([\\d]+)");
    
    public static void main(String[] args) {
        Matcher m = p.matcher("string1234more567string890");
        if (m.find()) {
            System.out.println(m.group(1)); // แสดงแค่กลุ่มที่ 1 (ตัวเลขลำดับที่ 2)
        }
    }
}

ผลลัพธ์: 567

คำอธิบาย Pattern [^\\d]*[\\d]+[^\\d]+([\\d]+)

  • [^\\d]* - ข้ามตัวอักษรที่ไม่ใช่ตัวเลข
  • [\\d]+ - ข้ามกลุ่มตัวเลขแรก
  • [^\\d]+ - ข้ามตัวอักษรที่ไม่ใช่ตัวเลขอีกครั้ง
  • ([\\d]+) - จับ (capture) กลุ่มตัวเลขที่สอง

แยกตัวเลขจาก Tag Attribute (XML/HTML)

ตัวอย่าง: <result name="response" numFound="9999" start="0"> ต้องการดึงค่า 9999

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

public class RegexExamples {
    public static void main(String[] args) {
        String xml = "<result name=\"response\" numFound=\"9999\" start=\"0\">";
        Pattern pattern = Pattern.compile("numFound=\"([0-9]+)\"");
        Matcher matcher = pattern.matcher(xml);
        if (matcher.find()) {
            System.out.println(matcher.group(1)); // 9999
        }
    }
}

แยก String ที่ประกอบด้วยตัวเลขและตัวอักษร

ตัวอย่าง: YOUR SET ADDRESS IS 6B1BC0 TEXT ต้องการดึง 6B1BC0 (6 ตัวอักษร)

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

public class RegexExamples {
    public static void main(String[] args) {
        Pattern p = Pattern.compile("YOUR SET ADDRESS IS\\s+([A-Z0-9]{6})");
        Matcher n = p.matcher("YOUR SET ADDRESS IS 6B1BC0 TEXT");
        if (n.find()) {
            System.out.println(n.group(1)); // 6B1BC0
        }
    }
}

แยก Key-Value Pair ด้วย Regular Expressions

String: bookname=testing&bookid=123456&bookprice=123.45 ต้องการ bookid=123456

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

public class RegexExamples {
    public static void main(String[] args) {
        String s = "bookname=cooking&bookid=123456&bookprice=123.45";
        // ใช้ Positive Lookbehind
        Pattern p = Pattern.compile("(?<=bookid=)\\d+");
        Matcher m = p.matcher(s);
        if (m.find()) {
            System.out.println(m.group()); // 123456
        }
    }
}

บทความเกี่ยวข้อง