Mã số '////'.split('/')
kết quả trong []
. Trong khi tôi mong đợi nó là ['', '', '', '', '']
. Nếu đây là một tính năng của ruby, tại sao nó được thiết kế như vậy?Tại sao '////'.split('/') tạo ra []?
Trả lời
Thiết kế này mang lại sự tiện lợi cho việc phân tích chuỗi có dấu phân tách. Ví dụ:
'1␣2␣3␣␣'.split('␣')
giờ sẽ cung cấp cho ['1', '2', '3']
thay vì ['1', '2', '3', '', '']
.
Tính năng này chỉ nhằm đơn giản hóa quy trình làm việc.
Tuy nhiên, tôi không thích tính năng này vì nó phá vỡ độ tinh khiết của phương pháp này. Để đạt được hiệu quả trên, bạn chỉ cần thêm rstrip('␣')
từ '1␣2␣3␣␣'
và split('␣')
.
'('␣')' trông dễ thương. –
Bạn không thể tách chuỗi ký tự phân cách bằng dấu phân cách.
Bạn nên vượt qua giới hạn như tham số thứ hai để tách chức năng để đạt được hành vi này
'////'.split('/',-1)
=>
["", "", "", "", ""]
Nếu tham số giới hạn được bỏ qua, trailing lĩnh vực rỗng đang bị đàn áp. Nếu giới hạn là số dương, tối đa số trường đó sẽ được trả lại (nếu giới hạn là 1, toàn bộ chuỗi được trả về làm mục nhập duy nhất trong một mảng). Nếu phủ định, không có giới hạn về số trường được trả lại và các trường rỗng theo sau sẽ không bị chặn
* + 1 * .. Tôi đã làm ... :) Nhưng bạn có thể thêm các dòng từ [doc] (http://www.ruby-doc.org/core-2.0.0/String.html#method-i- split) như - ** Nếu tham số giới hạn bị bỏ qua, các trường null theo sau bị chặn **. Nếu giới hạn là số dương, tối đa số trường đó sẽ được trả lại (nếu giới hạn là 1, toàn bộ chuỗi được trả về làm mục nhập duy nhất trong một mảng). ** Nếu phủ định, không có giới hạn về số trường được trả về và các trường null sau không bị chặn. ** –
cảm ơn. nhận xét thực sự hữu ích. – SergeyKutsko
Phương pháp điều tra cho thấy kết quả tối ưu hóa, nó chỉ đơn giản là tạo ra các phần tử mảng trống sau trận đấu cuối cùng. là shewn bên dưới:
'////'.split('/')
=> []
'//a//'.split('/')
=> ["", "", "a"]
- 1. SQL split dấu phẩy tách ra hàng
- 2. Tại sao gulp-sass không tạo ra đầu ra
- 3. Tại sao tách trên `(?! ^)` Và `(? <! ^)` Lại tạo ra cùng một câu trả lời?
- 4. Tại sao Html.BeginForm tạo ra hành động trống?
- 5. Tại sao coffeescript tạo ra các lớp như thế này?
- 6. Tại sao WatchService tạo ra quá nhiều hoạt động?
- 7. C#, WinForms: ListBox.Items.Add tạo ra một OutOfMemoryException, tại sao?
- 8. Tại sao tập lệnh PowerShell này tạo ra lỗi?
- 9. Tại sao tác giả của prado lại tạo ra Yii?
- 10. Tại sao tệp kết xuất lõi được tạo ra?
- 11. Tại sao mã SQL này không tạo ra lỗi?
- 12. Tại sao trình biên dịch tạo ra assembly này?
- 13. div lồng nhau tạo ra một thanh cuộn. Tại sao?
- 14. Tại sao mô-đun mô-đun tạo ra một singleton?
- 15. Tại sao matlabcontrol ngắt chuỗi gọi khi proxy tạo ra?
- 16. Tại sao tôi không thể sử dụng "." như một dấu phân cách trong hàm split()?
- 17. Tại sao hai mẫu mã này tạo ra các kết quả đầu ra khác nhau?
- 18. Plugin Xếp hạng Sao jQuery không công nhận {split: 4}
- 19. Apache Spark RDD Split "|"
- 20. Tại sao nhận được trường hợp giả tạo được tạo ra với Moq ném một System.BadImageFormatException?
- 21. Tại sao g ++ tạo ra hai hàm tạo với các tên gọi khác nhau?
- 22. Tại sao hai tác vụ được tạo ra sau mỗi khác tạo ra cùng một giá trị ngẫu nhiên?
- 23. boost :: tokenizer vs boost :: split
- 24. java regex split chuỗi
- 25. Đặt Emacs Split thành Horizontal
- 26. Split() bị phản đối
- 27. Tại sao EAAccessoryDidConnectNotification xảy ra hai lần?
- 28. Tại sao đầu ra khác nhau?
- 29. Tại sao TaskCanceledException lại xảy ra?
- 30. Tại sao Python mở rộng đầu ra [[...]]
+1 .. để đặt câu hỏi hay ... :) –
Trong khi câu hỏi thú vị, nó không ở dạng tốt nhất có thể được hỏi. Câu hỏi của bạn có thể đánh lừa người đọc rằng bốn dấu gạch chéo liên tiếp là đáng kể cho hiệu ứng này, nhưng nó không phải là. Bạn sẽ nhận được kết quả tương tự với chuỗi dấu gạch chéo ngắn hơn. – sawa