2012-10-13 38 views
9

Sự khác nhau giữa hai (String#scanString#split) trong Ruby là gì?Sự khác nhau giữa String.scan và String.split

+0

Sự khác biệt là gì? Điều duy nhất mà chúng có điểm chung là chúng được gọi từ một đối tượng 'String' hoặc lớp con. Điều gì có vẻ rất khó hiểu? Câu hỏi này có thể vừa được giải quyết bằng cách nhìn vào tài liệu ruby. – Shoe

Trả lời

19

Chúng phục vụ các mục đích hoàn toàn khác nhau. String#scan được sử dụng để trích xuất các kết quả trùng khớp của một biểu thức chính quy từ một chuỗi và trả về các kết quả phù hợp trong một mảng, trong khi String#split nhằm chia chuỗi thành một mảng dựa trên dấu phân cách. Dấu phân tách có thể là một chuỗi tĩnh (như ; để phân tách trên một dấu chấm phẩy) hoặc một cụm từ thông dụng (như /\s/+ để phân tách trên bất kỳ ký tự khoảng trống nào).

Đầu ra của String#split không bao gồm dấu phân tách. Thay vào đó, mọi thứ ngoại trừ dấu phân tách sẽ được trả lại trong mảng đầu ra, trong khi đầu ra của String#scan chỉ chỉ bao gồm những gì được dấu phân tách phù hợp.

# A delimited string split on | returns everything surrounding the | delimiters 
"a|delimited|string".split("|") 
# Prints: ["a", "delimited", "string"] 

# The same string scanninng for | only returns the matched | 
"a|delimited|string".scan("|") 
# Prints: ["|", "|"] 

Cả hai bên trên cũng sẽ chấp nhận biểu thức chính quy thay cho chuỗi đơn giản "|".

# Split on everything between and including two t's 
"a|delimited|string".split(/t.+t/) 
# Prints: ["a|delimi", "ring"] 

# Search for everything between and including two t's 
"a|delimited|string".scan(/t.+t/) 
# Prints: ["ted|st"] 
Các vấn đề liên quan