2012-02-21 212 views
5

似乎PowerShell拆分運算符和.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

奇怪!好東西,我不使用Powershell;頁 – leppie 2012-02-21 05:28:16

回答

5

.NET的String.Split方法有兩個(組)重載。第一個接收一個字符數組,第二個接收一個字符串數組。實際上沒有接收字符串的重載。第一個人的行爲就像你描述的一樣,每個人物都被分開。第二個分裂整個字符串,就像你想要的一樣。

由於Powershell解析參數的方式,傳遞給Split的字符串將被解析爲char數組,並且首先調用第一個重載。如果你可以明確指定「46」是隻包含一個字符串的數組,它應該給你你想要的行爲。

1

關鍵的區別在於,-split操作符可以採用字符串或正則表達式模式,而Split方法只能採用字符串。 -split運算符有很多選項來調整它的行爲。你可以找到about_split文檔中的詳細信息:

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

0

另外一個區別,我沒有看到任何人提的是,串.split()方法只適用於你調用此方法的一個string對象上上。

Powershell -split運算符將採用數組作爲參數,並且一次拆分數組的所有元素。