2011-08-01 29 views
36

Có thể cho split để trả về giá trị String[] không? Tôi tò mò vì tôi muốn cố gắng phòng thủ nhất có thể trong mã của mình mà không cần phải kiểm tra không cần thiết. Mã như sau:Có khả năng Java String.split có thể trả về một chuỗi rỗng []

String[] parts = myString.split("\\w"); 

Tôi có cần thực hiện kiểm tra không trước khi sử dụng parts chia tách bài đăng không?

Trả lời

44

Nó không bao giờ trả về giá trị rỗng. Bạn nên luôn luôn kiểm tra javadoc của phương pháp nếu bạn không chắc chắn. Ví dụ String#split(String) nói

phương pháp này hoạt động như thể bằng cách gọi hai đối số split phương pháp

... và String#split(String,int) nói:

Nếu biểu thức không phù hợp với bất kỳ bộ phận của đầu vào sau đó mảng kết quả chỉ có một phần tử, cụ thể là chuỗi này.

Từ Javadoc bạn cũng có thể tìm ra loại ngoại lệ nào có thể xảy ra và quan trọng hơn là tại sao các ngoại lệ đó được ném ra. Ngoài ra một điều rất quan trọng để kiểm tra là nếu các lớp học là thread an toàn hay không.

+0

Tôi đã kiểm tra javadoc, trả về null! = Ném NPE. Tôi thấy PatternException mà nó có thể ném. – Woot4Moo

+4

Javadoc cho 'split (String regex)' không chỉ ra rằng null không thể được trả về. – Paul

+2

@Paul: Không, nhưng nếu 'null' có thể được trả về, nó (hoặc các tài liệu' Pattern # split') sẽ nói như vậy.Và phiên bản hai đối số, mà đối số duy nhất cho biết nó gọi, nói * "Nếu biểu thức không khớp với bất kỳ phần nào của đầu vào thì mảng kết quả chỉ có một phần tử, cụ thể là chuỗi này." * –

1

Không, bạn không cần phải kiểm tra null trên các bộ phận.

1

phương pháp Chia gọi phương thức Patter.split mà thực hiện điều này trong đầu của phương pháp này:

ArrayList<String> matchList = new ArrayList<String>();

Và cuối cùng không matchList.toArray() để trả về một mảng.

Vì vậy, không cần kiểm tra các giá trị rỗng.

+6

Không bao giờ dựa vào việc xem triển khai. Việc triển khai có thể thay đổi. Tài liệu là hợp đồng bạn đang làm việc. –

+1

True .. nhưng việc thực hiện các phương pháp này không thay đổi, hoặc toàn bộ thế giới java người đã sử dụng phương pháp này mà không có một kiểm tra null sẽ được trong tình trạng lộn xộn. –

+1

Trong trường hợp này, rõ ràng từ các tài liệu rằng nếu nó thay đổi, nó không được trả về 'null'. –

6

Tôi khuyên bạn nên tải xuống mã nguồn Java cho những thời điểm API không rõ ràng. Tất cả các câu trả lời ở đây chỉ cho bạn biết câu trả lời nhưng bạn thực sự nên xem cho chính mình. Bạn có thể tải xuống mã nguồn Java từ here (xem gần cuối trang).

Bằng cách làm theo mã nguồn bạn sẽ kết thúc tại String[] Pattern.split(CharSequence input, int limit). Giá trị trả lại đến từ một số không ArrayList mà trên đó toArray được gọi. toArray không trả lại giá trị rỗng: trong trường hợp danh sách trống, bạn sẽ nhận được một mảng trống.

Vì vậy, cuối cùng, không, bạn không phải kiểm tra giá trị rỗng.

+0

Xem T.J. Lời bình luận của Crowder ở nơi khác. – EJP

Các vấn đề liên quan