Độ phức tạp sẽ phụ thuộc vào biểu thức chính mà bạn sử dụng để thực hiện phân tách. (Có, đối số bạn cung cấp cho String.split (...) là một biểu thức chính quy!)
Ví dụ của bạn, nó sẽ là O(N)
nơi N
là số ký tự trong chuỗi đầu vào.
Thuật toán phân tách khá đơn giản, dựa trên việc triển khai regex hiện có. Một mô tả cấp cao là:
- Biên dịch regex và tạo một trình so khớp
- Lặp lại qua chuỗi:
- Sử dụng
Matcher.find(...)
để tìm ranh giới từ tiếp theo
- Sử dụng String.sub chuỗi để trích xuất từ
- Thêm từ vào danh sách các chuỗi
- Chuyển đổi danh sách các chuỗi thành một chuỗi các chuỗi.
Việc tìm kiếm các khoảng nghỉ giữa các "từ" sẽ O(N)
phức tạp hơn, tùy thuộc vào biểu thức chính quy ( find
cuộc gọi). Việc xây dựng danh sách, mảng kết quả và chuỗi con sẽ O(N)
trong trường hợp xấu nhất.
Các chi tiết chính xác có trong mã nguồn mà bạn có thể tìm thấy bằng Google. (Tìm kiếm "java.lang.String" source
, chọn một và sau đó đi sâu vào phiên bản Java mà bạn quan tâm. Hoặc tìm kiếm các tệp trong tệp ZIP mã nguồn có trong cài đặt JDK của bạn)