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

แยกตัวเลขออกจากสตริงโดยใช้ Java Regular Expressions

ต่อไปนี้คือตัวอย่างที่แสดงวิธีการดึงตัวเลขออกจากสตริงโดยใช้นิพจน์ทั่วไปใน Java

ความสามารถในการแยกวิเคราะห์สตริงและดึงข้อมูลออกมาเป็นทักษะสำคัญที่ผู้ทดสอบทุกคนควรมี สิ่งนี้มีประโยชน์อย่างยิ่งเมื่อทำการทดสอบ API และคุณจำเป็นต้องแยกวิเคราะห์การตอบสนอง JSON หรือ XML

ตัวอย่าง Java Regular Expression ต่อไปนี้เน้นที่การแยกตัวเลขหรือตัวเลขออกจากสตริง

แยกตัวเลขทั้งหมดออกจากสตริง

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

ที่เกี่ยวข้อง:

  • วิธีการแปลงสตริงเป็น Int ใน Java
  • วิธีย้อนกลับสตริงใน Java
  • วิธีเปรียบเทียบสตริงใน Java

แยกตัวเลข nth จากสตริง

หากคุณต้องการแยกเฉพาะตัวเลขบางตัวจากสตริง คุณสามารถระบุดัชนีให้กับ group() ฟังก์ชัน

ตัวอย่างเช่น หากเราต้องการแยกเฉพาะตัวเลขชุดที่สองจากสตริง string1234more567string890  เช่น 567 เราก็สามารถใช้:

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) {
        // create matcher for pattern p and given string
        Matcher m = p.matcher("string1234more567string890");

        // if an occurrence if a pattern was found in a given string...
        if (m.find()) {
            System.out.println(m.group(1)); // second matched digits
        }
    }
}

เอาท์พุต:

567

คำอธิบายของรูปแบบ [^\d]*[\d]+[^\d]+([\d]+)

  • ไม่ต้องสนใจตัวเลขใดๆ
  • ไม่ต้องสนใจหลักใดๆ (ตัวเลขแรก)
  • ละเว้นที่ไม่ใช่ตัวเลขอีกครั้ง
  • จับหมายเลขที่สอง

แยกหมายเลขจากแอตทริบิวต์แท็ก

เมื่อจัดการกับแท็ก 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) {
        Pattern pattern = Pattern.compile("numFound=\"([0-9]+)\"");
        Matcher matcher = pattern.matcher("");

        if (matcher.find()) {
            System.out.println(matcher.group(1));
        }
    }
}

เอาท์พุต:

9999

แยกสตริงที่มีตัวเลขและอักขระ

คุณสามารถใช้นิพจน์ทั่วไปของ Java เพื่อแยกส่วนของสตริงที่มีตัวเลขและอักขระ สมมติว่าเรามีสตริงนี้ Sample_data = 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)); // Prints 123456
        }
    }
}

เอาท์พุต:

6B1BC0

แยกคู่คีย์-ค่าด้วยนิพจน์ทั่วไป

สมมติว่าเรามีสตริงรูปแบบ 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";
        Pattern p = Pattern.compile("(?<=bookid=)\\d+");
        Matcher m = p.matcher(s);
        if (m.find()) {
            System.out.println(m.group());
        }
    }
}

เอาท์พุต:

123456