Trong Ruby 1.9.3 (và có lẽ là phiên bản cũ hơn, không chắc chắn), tôi đang cố gắng tìm ra lý do tại sao phương thức tách # String của Ruby cho tôi kết quả nhất định. Kết quả tôi nhận được dường như phản trực giác từ những gì tôi mong đợi. Dưới đây là ví dụ:Chuỗi có độ dài bằng không được trả về từ String # split
"abcabc".split("b") #=> ["a", "ca", "c"]
"abcabc".split("a") #=> ["", "bc", "bc"]
"abcabc".split("c") #=> ["ab", "ab"]
Ở đây, ví dụ đầu tiên trả về chính xác những gì tôi mong đợi.
Nhưng trong ví dụ thứ hai, tôi nhầm lẫn là tại sao #split trả về một chuỗi có độ dài bằng 0 làm giá trị đầu tiên của mảng được trả về. Lý do cho việc này là gì? Đây là những gì tôi mong đợi thay vào đó:
"abcabc".split("a") #=> ["bc", "bc"]
Và dọc theo cùng một dòng, làm thế nào không có chuỗi có độ dài bằng không được trả lại trong ví dụ thứ ba? Nếu ví dụ thứ hai trả về một chuỗi có độ dài bằng không vì nó là giá trị đầu tiên, thì ví dụ cuối cùng sẽ trả về giống như giá trị cuối cùng của nó.
Khai sáng cho tôi, tôi còn thiếu gì ở đây ??
EDIT: Nhìn sâu hơn vào nó, tôi nhận ra lý do tại sao đây là hành vi mặc định và tại sao suy nghĩ của tôi hoàn toàn sai. Ví dụ: nếu chúng tôi đã trải qua một tệp CSV, chia tách trên mỗi cột, dữ liệu của chúng tôi sẽ bị loại bỏ vì các cột hàng đầu trống sẽ bị bỏ qua.
Ngoài ra, điều quan trọng cần lưu ý là câu hỏi này không liên quan đến chỉ Ruby - Tôi đang học được rằng nhiều ngôn ngữ khác hoạt động theo cùng một cách chính xác. Tôi chỉ đơn giản là sử dụng Ruby khi tôi biết điều này.
Bạn không nên chia CSV trên dấu phẩy. Nó sẽ cho bạn kết quả xấu trên bất kỳ chuỗi được trích dẫn nào có dấu phẩy được nhúng. Thay vào đó, hãy sử dụng mô-đun CSV tích hợp của Ruby, sẽ làm điều đúng. –
@ người đàn ông tin: Hiểu, tôi chỉ nói về những điểm chung. Cảm ơn! – Threeve