Tôi đang cố gắng sử dụng cụm từ thông dụng để xác định định dạng người dùng đã áp dụng khi nhập dữ liệu vào trong hộp văn bản.
Các biểu thức thông thường như sau:Tại sao các cụm từ thông dụng này thực thi chậm trong Java?
(\\s?[" + alphabet + "]{9,9})+
Để xác định liệu đầu vào là một hoặc nhiều chuỗi có độ dài 9 bằng chữ cái nhất định, có thể cách nhau bởi khoảng trắng.
(>[\\w\\s]+\\n[" + alphabet + "\\s]+)+
Để kiểm tra xem đầu vào là trong FASTA format
Các biểu thức thông thường chạy chậm khủng khiếp khi kết hợp với . Tại sao điều này?
Tôi nhận thấy điều này có thể là do Java lưu trữ tất cả các kết quả phù hợp (mà tôi không cần tại thời điểm này), nhưng thêm ?:
vào mỗi dấu ngoặc đơn sẽ phá vỡ regex. Làm sao nó có thể hoàn thành?
Cảm ơn bạn,
Martin
Sửa 1: tôi đã không thể tạo lại vấn đề này - nó chỉ xảy ra trên một máy tính. Điều này có thể gợi ý điều gì đó sai với thiết lập VM cụ thể đó.
Chúng ta cần một cái gì đó mạnh mẽ hơn, và vì vậy chúng tôi sẽ thực hiện điều này một cách khác nhau. Tôi đã chọn câu trả lời của Joel là câu trả lời đúng, vì tôi tin rằng một số trường hợp đặc biệt trong mẫu có thể là nguyên nhân.
Có bao nhiêu mẫu mà bạn có khả năng đang cố gắng đối sánh với mỗi chuỗi đầu vào? Các mẫu có động hay tĩnh không? –
@ Joel Chỉ có hai mẫu này. Chúng tĩnh. Sử dụng String.matches sẽ gây ra một biên dịch mỗi lần, nhưng ngay cả phù hợp với các mô hình một thời gian rất mất (> 10s cho khoảng 300 ký tự đầu vào) –
bạn có thể xác định "khủng khiếp chậm"? –