2012-04-03 23 views
17

Đối với thử nghiệm JUnit, tôi cần một Chuỗi bao gồm nhiều dòng. Nhưng tất cả những gì tôi nhận được là một chuỗi đơn lót. Tôi thử như sau:Làm thế nào để tạo ra một String với trở về vận chuyển?

String str = ";;;;;;\n" + 
       "Name, number, address;;;;;;\n" + 
       "01.01.12-16.02.12;;;;;;\n" + 
       ";;;;;;\n" + 
       ";;;;;;"; 

Tôi cũng đã cố gắng \n\r thay vì \n. System.getProperty ("line.separator") cũng không hoạt động. nó tạo ra một \n trong chuỗi và không có trở lại vận chuyển. Vậy làm thế nào tôi có thể giải quyết điều đó?

+1

Tôi không phải là một chàng trai java nhưng chỉ để giúp bạn ở đây tôi nghĩ rằng chuỗi chính xác cho một vận chuyển trở lại là ** \ r \ n ** –

+0

Nơi nào bạn rằng nó không chứa dòng mới? Trong trình gỡ rối hoặc trong tệp đầu ra? –

+0

Câu hỏi không rõ ràng nếu chúng ta nhìn vào câu trả lời được chấp nhận. – Manu

Trả lời

0

Cảm ơn câu trả lời của bạn. Tôi đã bỏ lỡ dữ liệu của mình được lưu trữ trong một số List<String> được chuyển đến phương pháp thử nghiệm. Sai lầm là tôi đặt chuỗi vào phần tử đầu tiên của ArrayList. Đó là lý do tại sao tôi nghĩ String chỉ bao gồm một dòng duy nhất, bởi vì trình gỡ lỗi chỉ cho tôi một mục nhập.

3

Hãy thử \r\n trong đó \r là phí vận chuyển. Cũng đảm bảo rằng đầu ra của bạn không có dòng sản phẩm mới, vì debugger có thể cho bạn ký tự đặc biệt theo hình thức \n, \r, \t, vv

+0

Điều đó không hoạt động. Bây giờ tôi đã có một String chứa \ r \ n thay vì các dòng mới. – Bevor

+1

Trường hợp bạn không có dòng mới? Trong trình gỡ rối hoặc trong tệp đầu ra? –

10

Cách nhanh nhất mà tôi biết để tạo ra một nhân vật mới-line trong Java là: String.format("%n")

Tất nhiên bạn có thể đặt bất cứ điều gì bạn muốn xung quanh %n như:

String.format("line1%nline2")

Hoặc thậm chí nếu bạn có rất nhiều dòng:

String.format("%s%n%s%n%s%n%s", "line1", "line2", "line3", "line4")

+0

Hmmm, tôi vẫn nhận được một lớp lót. – Bevor

+3

Lưu ý rằng '% n' phụ thuộc vào nền tảng. –

33

Tùy thuộc vào ý bạn là "nhiều dòng". Các hệ điều hành khác nhau sử dụng các dấu tách dòng khác nhau.

Trong Java, \r luôn trả về vận chuyển và \n là nguồn cấp dữ liệu dòng. Trên Unix, chỉ \n là đủ cho một dòng mới, trong khi nhiều chương trình trên Windows yêu cầu \r\n. Bạn có thể sử dụng đường truyền mặc định của dòng mới sử dụng System.getProperty("line.separator") hoặc sử dụng String.format("%n") như được đề cập trong các câu trả lời khác. Nhưng thực sự, bạn cần biết liệu bạn có đang cố gắng để tạo dòng mới cụ thể cho OS hay không - ví dụ: nếu đây là văn bản sẽ được truyền như một phần của giao thức cụ thể, thì bạn sẽ thấy điều gì giao thức đó có vẻ là một dòng mới. Ví dụ: RFC 2822 xác định dấu phân tách dòng của \r\n và điều này sẽ được sử dụng ngay cả khi bạn đang chạy trên Unix. Vì vậy, đó là tất cả về ngữ cảnh.

1

Làm điều này: Bước 1: String bạn

String str = ";;;;;;\n" + 
      "Name, number, address;;;;;;\n" + 
      "01.01.12-16.02.12;;;;;;\n" + 
      ";;;;;;\n" + 
      ";;;;;;"; 

Bước 2: Chỉ cần thay thế tất cả "\ n" với "% n" kết quả trông giống như Thông báo

String str = ";;;;;;%n" + 
      "Name, number, address;;;;;;%n" + 
      "01.01.12-16.02.12;;;;;;%n" + 
      ";;;;;;%n" + 
      ";;;;;;"; 

này tôi đã chỉ cần đặt "% n" thay cho "\ n"

Bước 3: Bây giờ chỉ cần gọi định dạng()

str=String.format(str); 

Đó là tất cả những gì bạn phải làm.

0

Cố gắng thêm ký tự .append('\r').append('\n'); thay vì chuỗi .append("\\r\\n");

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