2012-02-21 165 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运算符将采用数组作为参数,并且一次拆分数组的所有元素。