Tôi đang cố gắng cải thiện hiệu suất của một số mã. Có vẻ như sau:Làm cách nào để xác định xem một chuỗi không phải là cụm từ thông dụng?
public boolean isImportant(String token) {
for (Pattern pattern : patterns) {
return pattern.matches(token).find();
}
}
Điều tôi nhận thấy là nhiều Mẫu có vẻ là các chuỗi ký tự đơn giản không có cấu trúc biểu thức chính quy. Vì vậy, tôi muốn chỉ đơn giản là lưu trữ chúng trong một danh sách riêng biệt (importantList) và làm một bài kiểm tra bình đẳng thay vì thực hiện một mô hình phù hợp đắt tiền hơn, chẳng hạn như sau:
public boolean isImportant(String token) {
if (importantList.contains(token)) return true;
for (Pattern pattern : patterns) {
return pattern.matches(token).find();
}
}
Làm thế nào để lập trình xác định xem một chuỗi đặc biệt không chứa cấu trúc cụm từ thông dụng?
Chỉnh sửa: Tôi nên thêm rằng câu trả lời không cần phải nhạy cảm với hiệu suất. (tức là các biểu thức thông thường có thể được sử dụng) Tôi chủ yếu quan tâm đến hiệu năng của isImportant() vì nó được gọi là hàng triệu lần, trong khi sự khởi tạo của các mẫu chỉ được thực hiện một lần.
Sẽ không làm biểu thức chính quy trên một chuỗi để xác định xem đó có phải là cụm từ thông dụng mỗi lần tồi tệ hơn nhiều so với việc sử dụng từng chuỗi như một cụm từ thông dụng không? –
@MikeM: Đó không phải là những gì anh ấy hỏi. 'hello' là một regex hoàn toàn hợp lệ. –
Không thể (ít nhất là không dễ dàng hoặc đáng giá, trừ khi bạn tìm thấy một số mẫu trong văn bản chuỗi đồng bằng). Một chuỗi ký tự đơn giản là một mẫu regex hợp lệ. – AC1