.NET字符串拆分()

问题描述 投票:5回答:4

似乎PowerShell -split操作符和.NET Split()方法完全不同。

.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中工作,使用Split():

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
.net string text powershell
4个回答
5
投票

.NET的String.Split方法有两组(组)重载。第一个接收字符数组,第二个接收字符串数组。实际上没有接收字符串的重载。第一个行为就像你描述的那样,每个角色都是单独分割的。第二个沿着整个字符串分割,就像你想要的那样。

由于PowerShell解析参数的方式,传递给Split的字符串将被解析为char数组,并调用第一个重载。如果您可以明确指定“46”是一个只包含一个字符串的数组,它应该为您提供所需的行为。


9
投票

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

当你打电话给string.Split(string)时,它会使用string.Split(char[])超载(因为string可能会被投放到char[],但不能投入到string[])。

为了使用string.Split(string[], StringSplitOptions)重载,你必须以"123456789".Split(new[] { "45" }, StringSplitOptions.None)的方式调用它。


1
投票

关键的区别在于-split运算符可以采用字符串或正则表达式模式,而Split方法只能采用字符串。 -split运算符有很多选项可以调整它的行为。您可以在the about_split document找到更多信息


0
投票

我没有看到任何人提到的另一个区别是字符串.split()方法仅适用于您调用方法的单个字符串对象。

PowerShell -split运算符将以数组作为参数,并立即拆分数组的所有元素。

© www.soinside.com 2019 - 2024. All rights reserved.