2012-10-13 7 views
9

के बीच अंतर रूबी में इन दो (String#scan और String#split) के बीच क्या अंतर है?String.scan और String.split

+0

क्या अंतर है? एकमात्र चीज जो उनके समान है वह यह है कि उन्हें दोनों 'स्ट्रिंग' ऑब्जेक्ट या बाल वर्ग से बुलाया जाता है। इतना भ्रमित लग रहा था? रूबी डॉक्टर पर एक नज़र डालने से यह सवाल हल हो गया था। – Shoe

उत्तर

19

वे पूरी तरह से अलग-अलग उद्देश्यों की सेवा करते हैं। String#scan स्ट्रिंग से नियमित अभिव्यक्ति के मैचों को निकालने के लिए उपयोग किया जाता है और मैचों को सरणी में वापस कर देता है, जबकि String#split का उद्देश्य एक सरणी को एक सरणी में विभाजित करने के लिए एक सरणी को विभाजित करना है। डिलीमीटर या तो एक स्थिर स्ट्रिंग हो सकता है (जैसे ; एक अर्धविराम पर विभाजित करने के लिए) या नियमित अभिव्यक्ति (जैसे /\s/+ किसी भी व्हाइटस्पेस वर्णों पर विभाजित करने के लिए) हो सकता है।

String#split का आउटपुट डिलीमीटर शामिल नहीं है। इसके बजाय, डेलीमीटर को छोड़कर सबकुछ आउटपुट सरणी में वापस किया जाएगा, जबकि String#scan का आउटपुट केवल में शामिल होगा जो डेलीमीटर द्वारा मेल किया गया है।

# 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: ["|", "|"] 
की

उपर्युक्त दोनों भी सरल स्ट्रिंग "|" के स्थान पर एक नियमित अभिव्यक्ति को स्वीकार करेंगे।

# 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"] 
संबंधित मुद्दे