2012-02-21 18 views
5

ऐसा लगता है कि पावरशेल-स्प्लिट ऑपरेटर और .NET स्प्लिट() विधि पूरी तरह से अलग है।
.NET विभाजक तारों का व्यवहार करता है जैसे कि वे चरित्र सरणी थे।.NET स्ट्रिंग स्प्लिट()

$str = "123456789" 
Write-Host ".NET Split(): " 
$lines = $str.Split("46") 
Write-Host "Count: $($lines.Length)" 
$lines 

$str = "123456789" 
Write-Host "-split operator: " 
$lines = $str -split "46" 
Write-Host "Count: $($lines.Length)" 
$lines 

आउटपुट:

.NET Split(): 
Count: 3 
123 
5 
789 


-split operator: 
Count: 1 
123456789 

वहाँ एक .NET अनुप्रयोग PowerShell के रूप में उसी तकनीक का उपयोग, और एक ठोस इकाई के रूप में स्ट्रिंग विभाजक का उपयोग करने के लिए कोई तरीका है? उम्मीद है, RegEx के बिना।

धन्यवाद।

संपादित करें: यह PowerShell में काम किया, स्प्लिट() का उपयोग कर:

Write-Host "Divided by 46:" 
"123456789".Split([string[]] "46", [StringSplitOptions]::None) 

Write-Host "`n`nDivided by 45:" 
"123456789".Split([string[]] "45", [StringSplitOptions]::None) 


Divided by 46: 
123456789 


Divided by 45: 
123 
6789 
+0

अजीब! अच्छी बात यह है कि मैं पावरहेल का उपयोग नहीं करता; पी – leppie

उत्तर

5

.NET की स्ट्रिंग। स्प्लिट विधि में दो (समूह) अधिभार हैं। पहले एक अक्षर सरणी प्राप्त करता है, और दूसरा एक स्ट्रिंग सरणी प्राप्त करता है। वास्तव में एक अधिभार नहीं है जो एक स्ट्रिंग प्राप्त करता है। पहला चरित्र आपके जैसा वर्णन करता है, प्रत्येक चरित्र को अलग-अलग विभाजित किया जाता है। दूसरे स्ट्रिंग्स के साथ दूसरा विभाजन, जैसे आप इसे चाहते हैं।

पावरहेल पैरामीटर को पार करने के तरीके के कारण, स्प्लिट को पारित एक स्ट्रिंग को चार सरणी के रूप में पार्स किया जाएगा, और पहला अधिभार कहा जाता है। यदि आप स्पष्ट रूप से निर्दिष्ट कर सकते हैं कि "46" एक सरणी है जिसमें केवल एक स्ट्रिंग है, तो आपको वह व्यवहार देना चाहिए जो आप चाहते हैं।

9

http://msdn.microsoft.com/en-us/library/system.string.split.aspx

जब आप string.Split(string) कॉल कर रहे हैं, यह string.Split(char[]) अधिभार का उपयोग करता है (जैसा कि string एक करने के लिए casted किया जा सकता है char[], लेकिन string[] पर नहीं)।

string.Split(string[], StringSplitOptions) ओवरलोड का उपयोग करने के लिए, आपको इसे "123456789".Split(new[] { "45" }, StringSplitOptions.None) पर कॉल करना होगा।

1

मुख्य अंतर यह है कि -प्लिट ऑपरेटर एक स्ट्रिंग या रेगेक्स पैटर्न ले सकता है, जबकि स्प्लिट विधि केवल स्ट्रिंग ले सकती है। -प्लिट ऑपरेटर के व्यवहार को बदलने के लिए बहुत सारे विकल्प हैं। आप about_split दस्तावेज़ में अधिक जानकारी प्राप्त कर सकते हैं:

http://technet.microsoft.com/en-us/library/dd347708.aspx

0

एक अन्य अंतर मैं नहीं देखा किसी को भी उल्लेख नहीं है कि स्ट्रिंग .split() विधि केवल एकल स्ट्रिंग वस्तु आप विधि कॉल कर रहे हैं पर काम करता है पर।

पावरहेल-स्प्लिट ऑपरेटर एक तर्क के रूप में एक सरणी लेगा, और एक बार में सरणी के सभी तत्वों को विभाजित करेगा।

संबंधित मुद्दे