Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Trích xuất số từ chuỗi trong Java bằng Regular Expression

Dưới đây là các ví dụ minh họa cách trích xuất số từ chuỗi sử dụng regular expression trong Java.

Khả năng phân tích chuỗi và trích xuất thông tin là kỹ năng thiết yếu cho tester, đặc biệt khi test API và cần parse response JSON hoặc XML.

Các ví dụ dưới đây tập trung vào việc trích xuất số/chữ số từ String.

Trích xuất tất cả số từ một chuỗi

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());
        }
    }
}

Kết quả:

1234
567
890
  • Cách chuyển String thành Int trong Java
  • Cách đảo ngược chuỗi trong Java
  • Cách so sánh chuỗi trong Java

Trích xuất chữ số thứ n từ chuỗi

Nếu bạn muốn trích xuất chỉ một số cụ thể, có thể cung cấp index cho phương thức group().

Ví dụ: chỉ trích xuất nhóm số thứ 2 từ chuỗi string1234more567string890, tức là 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) {
        Matcher m = p.matcher("string1234more567string890");
        if (m.find()) {
            System.out.println(m.group(1)); // nhóm số thứ 2
        }
    }
}

Kết quả:

567

Giải thích pattern [^\\d]*[\\d]+[^\\d]+([\\d]+):

  • Bỏ qua các ký tự không phải số
  • Bỏ qua nhóm số đầu tiên
  • Bỏ qua các ký tự không phải số tiếp theo
  • Nhóm bắt (capture) nhóm số thứ hai

Trích xuất số từ thuộc tính thẻ

Khi xử lý thẻ XML/HTML, đôi khi cần trích xuất giá trị từ thuộc tính. Ví dụ thẻ:

<result name="response" numFound="9999" start="0">

Để trích xuất số 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));
        }
    }
}

Kết quả:

9999

Trích xuất chuỗi chứa chữ số và ký tự

Có thể dùng regex để trích xuất phần chuỗi chứa cả chữ số và ký tự. Giả sử chuỗi Sample_data = YOUR SET ADDRESS IS 6B1BC0 TEXT, muốn lấy 6B1BC0 (độ dài 6 ký tự):

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)); // In ra 6B1BC0
        }
    }
}

Kết quả:

6B1BC0

Trích xuất cặp khóa-giá trị với Regular Expression

Giả sử chuỗi dạng bookname=testing&bookid=123456&bookprice=123.45, muốn lấy 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());
        }
    }
}

Kết quả:

123456