.NET字符串拆分()

mcu*_*mcu 5 .net string powershell text

似乎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
Run Code Online (Sandbox Code Playgroud)

输出:

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


-split operator:
Count: 1
123456789
Run Code Online (Sandbox Code Playgroud)

有没有办法让.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
Run Code Online (Sandbox Code Playgroud)

pen*_*tur 9

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

当你正在调用时string.Split(string),它会使用string.Split(char[])重载(string可以转换为a char[],但不能转换为string[]).

要使用string.Split(string[], StringSplitOptions)重载,必须以某种方式调用它"123456789".Split(new[] { "45" }, StringSplitOptions.None).


Avn*_*tan 5

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

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