2013-02-27 7 views
19

Tôi có ví dụ sau đây, để giải thích rõ hơn những gì tôi đang cố gắng để làm:Java chia bởi một nhân vật liên tiếp

String text = "a,b,,,,c,,"; 
String[] split = text.split(","); 
for(int i=0;i<split.length;i++){ 
    System.out.println("I = "+i+" "+split[i]); 
} 

Đầu ra là:

I = 0 a 

I = 1 b 

I = 2 

I = 3 

I = 4 

I = 5 c 

Nhưng, những gì tôi muốn là để có được một mảng có kích thước 8, cũng chứa:

I = 6 

I = 7 

Tất nhiên, 2 thành phần cuối cùng sẽ là chuỗi rỗng, nhưng nó rất cần thiết cho m e để có được chúng. Ngoài ra, tôi nghĩ rằng nó hợp lý để có chúng. Ý tôi là, nếu tôi có:

String text = "a,b,,,,c,,d"; 

Kết quả sẽ là một mảng có kích thước 8 và tôi không nghĩ có sự khác biệt lớn giữa 2 ví dụ.

Trả lời

26
String[] split = text.split(",", -1); 

Hành vi này thực sự có vẻ phức tạp nhưng thực sự được giải thích (không phải rất rõ IMHO, đã nói) trong số official documentation.

Nếu n là không tích cực sau đó mô hình sẽ được áp dụng nhiều lần như càng tốt và mảng có thể có bất kỳ chiều dài

Vấn đề với text.split(",") là nó tương đương với text.split(",", 0). Sử dụng một giới hạn 0, như được giải thích trong tài liệu:

Nếu n là số không sau đó mô hình sẽ được áp dụng nhiều lần như thể, mảng có thể có bất kỳ chiều dài, và trailing chuỗi rỗng sẽ bị loại bỏ.

Bạn chắc chắn không muốn các chuỗi trống bị hủy.

+6

Wow. Tôi không nghĩ rằng mình có thể học được điều gì đó mới mẻ về một thứ cơ bản như 'Chia chuỗi #'. Tôi đã sai. Cả câu hỏi và câu trả lời đều cực kỳ giáo dục. Điều đó nói rằng, cung cấp cho người dùng * giải thích * sẽ có một câu trả lời tốt và làm cho nó tuyệt vời. –

+0

Cảm ơn bạn, nó hoạt động tuyệt vời! Tôi đã lập trình ứng dụng trong java khoảng 3 năm, nhưng có vẻ như luôn có những thứ mới để học, ngay cả khi chúng có vẻ đơn giản ngay từ cái nhìn đầu tiên. – Anakin001

+0

@ T.J.Crowder Tôi vừa gặp vấn đề này tuần trước và điều này đã hiệu quả. Tôi thực sự không hiểu tại sao/làm thế nào điều này hoạt động và tài liệu không phải là rất rõ ràng về nó – m0skit0

0

tôi thích (nếu bạn có thể sử dụng thư viện bên ngoài):

String[] split = StringUtils.splitPreserveAllTokens(text, ',');

Đối với hầu hết các phần thư viện StringUtils có xu hướng được chỉ là một chút hiệu quả hơn việc thực hiện java mặc định vì ... tốt , này, đó là lý do tại sao Apache làm phiền nó. Ngoài ra, trên mặt của nó, rõ ràng những gì phân chia này là làm từ tên phương pháp, trong khi ở cái nhìn đầu tiên một chuỗi thường xuyên chia với giới hạn -1 có thể không được.