ruby .split ('\ n') không bị tách trên dòng mới


82

Tại sao chuỗi này không tách trên mỗi "\ n"? (RUBY)

"ADVERTISING [7310]\n\t\tIRS NUMBER:\t\t\t\t061340408\n\t\tSTATE OF INCORPORATION:\t\t\tDE\n\t\tFISCAL YEAR END:\t\t\t0331\n\n\tFILING VALUES:\n\t\tFORM TYPE:\t\t10-Q\n\t\tSEC ACT:\t\t1934 Act\n\t".split('\n')
>> ["ADVERTISING [7310]\n\t\tIRS NUMBER:\t\t\t\t061340408\n\t\tSTATE OF INCORPORATION:\t\t\tDE\n\t\tFISCAL YEAR END:\t\t\t0331\n\n\tFILING VALUES:\n\t\tFORM TYPE:\t\t10-Q\n\t\tSEC ACT:\t\t1934 Act\n\t"]

Câu trả lời:


172

Bạn cần .split("\n"). Nội suy chuỗi là cần thiết để diễn giải đúng dòng mới và dấu ngoặc kép là một cách để làm điều đó.


39

Trong Ruby dấu nháy đơn xung quanh một chuỗi có nghĩa là các ký tự thoát không được diễn giải. Không giống như trong C, trong đó dấu ngoặc kép biểu thị một ký tự duy nhất. Trong trường hợp '\n'này thực sự tương đương với "\\n".

Vì vậy, nếu bạn muốn tách \nbạn cần thay đổi mã của mình để sử dụng dấu ngoặc kép.

.split("\n")


22

Ruby có các phương thức String#each_lineString#lines

trả về một enum: http://www.ruby-doc.org/core-1.9.3/String.html#method-i-each_line

trả về một mảng: http://www.ruby-doc.org/core-2.1.2/String.html#method-i-lines

Tôi đã không kiểm tra nó theo kịch bản của bạn nhưng tôi cá rằng nó sẽ hoạt động tốt hơn so với việc chọn các ký tự dòng mới theo cách thủ công.


Nhưng lưu ý rằng điều đó #linessẽ không loại bỏ ký tự dòng mới, trong khi #splitsẽ làm điều đó: "a\nb".lines => ["a\n", "b"]while"a\nb".split("\n") => ["a", "b"]
tanius

Ngoài ra, đối với các tệp được đọc ở chế độ văn bản (mặc định), các chuỗi dòng mới được dịch sang "\n"( xem ). Vì vậy, không cần phải chọn chúng theo cách thủ công. Sử dụng "\n"trên nhiều nền tảng.
tanius


3

Bạn không thể sử dụng dấu ngoặc kép cho việc này:

"ADVERTISING [7310]\n\t\tIRS NUMBER:\t\t\t\t061340408\n\t\tSTATE OF INCORPORATION:\t\t\tDE\n\t\tFISCAL YEAR END:\t\t\t0331\n\n\tFILING VALUES:\n\t\tFORM TYPE:\t\t10-Q\n\t\tSEC ACT:\t\t1934 Act\n\t".split("\n")
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.