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