2012-03-04 41 views
5

Tôi đang tìm cách lấy một chuỗi và chia nhỏ nó thành một mảng tại các ngắt dòng (\ n) Tôi đã thử sử dụng split nhưng sẽ lấy đi dấu phân tách. Tôi cần \n để được giữ ở cuối mỗi dòng nếu nó tồn tại. Có một cái gì đó như thế này đã tồn tại hoặc tôi sẽ cần phải mã nó bản thân mình?Cái gì đó tương tự như split()?

+0

nhờ chàng trai! nó đã khắc phục được vấn đề của tôi. Tôi đã cố gắng một triệu lần để hiểu regex, vẫn chưa nhận được nó xuống. – bwoogie

+0

Bạn thực sự nên có một cái nhìn tại các hướng dẫn mà tôi đã liên kết đến như nó là hướng dẫn regex tốt nhất mà tôi đã nhìn thấy cho đến nay. –

Trả lời

4

Tôi đã thử sử dụng tính năng tách nhưng điều đó sẽ xóa dấu phân tách. Tôi cần \ n để được giữ ở cuối mỗi dòng nếu nó tồn tại.

Bạn vẫn có thể sử dụng và duy trì ngắt dòng nếu bạn sử dụng nhìn về phía trước hoặc nhìn sau trong regex của mình. Xem hướng dẫn biểu thức chính quy tốt nhất mà tôi biết:
Regex Tutorial
Look-Around section of the Regex Tutorial.

Ví dụ:

public class RegexSplitPageBrk { 


    public static void main(String[] args) { 
     String text = "Hello world\nGoodbye cruel world!\nYeah this works!"; 
     String regex = "(?<=\\n)"; // with look-behind! 

     String[] tokens = text.split(regex); 

     for (String token : tokens) { 
     System.out.print(token); 
     } 
    } 
} 

Các nhìn về phía trước hoặc tìm-sau (còn gọi là "nhìn xung quanh") là không phá hủy để các nhân vật họ phù hợp.

+2

Thay vì chỉ đơn giản là nói "bạn đang làm sai" - tại sao không cung cấp giải pháp ...? – debracey

+0

@debracey: đó là kế hoạch tất cả cùng. Tôi thường đăng một câu trả lời ban đầu và sau đó thêm câu trả lời cho nó, để không làm việc trên các câu hỏi bị xóa. Tôi ghét nó khi điều đó xảy ra. Tôi cũng không thích đăng mã mà không thử nghiệm nó trước. –

+1

Vâng - Tôi thấy bạn đã chỉnh sửa bài đăng :-) – debracey

4

Thay thế cho @Hovercraft giải pháp với lookahead khẳng định:

String[] result = s.split("(?=\n)"); 

Thông tin chi tiết về lookahead trong http://www.regular-expressions.info/lookaround.html

+0

Đúng, một giải pháp tốt là tốt. 1+ –

1

Một giải pháp khác chỉ là thêm delimiters sau khi tách

String delimiter = "\n" 
String[] split = input.split(delimiter); 
for(int i = 0; i < split.length; i++){ 
    split[i] += delimiter; 
} 
Các vấn đề liên quan