.NET字符串拆分()
似乎PowerShell.NET字符串拆分(),.net,string,text,powershell,.net,String,Text,Powershell,似乎PowerShell-split运算符和.NETsplit()方法的作用完全不同 .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
-split
运算符和.NETsplit()
方法的作用完全不同
.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相同的技术,并将字符串分隔符用作一个实体单元?希望没有正则表达式
这在PowerShell中起作用,使用Split()
调用string.Split(string)
时,它使用string.Split(char[])
重载(因为string
可以转换为char[]
,但不能转换为string[]
)
为了使用
string.Split(string[],StringSplitOptions)
重载,必须以的方式调用它“123456789”.Split(new[]{“45”},StringSplitOptions.None)
.NET的string.Split方法有两组重载。第一个接收字符数组,第二个接收字符串数组。实际上没有接收字符串的重载。第一个角色的行为与您描述的一样,每个角色都被单独拆分。第二个沿着整个弦分裂,就像你想要的那样
由于PowerShell解析参数的方式,传递给Split的字符串将被解析为字符数组,并调用第一个重载。如果您可以明确指定“46”是一个仅包含一个字符串的数组,那么它应该提供您想要的行为。关键区别在于
-split
操作符可以接受字符串或正则表达式模式,而split方法只能接受字符串。-split
操作符有很多选项来调整其行为。您可以在中找到更多信息另一个我没有看到任何人提到的区别是string.split()
方法只对调用该方法的单个string对象有效
PowerShell
-split
操作符将数组作为其参数,并同时拆分数组的所有元素。奇怪!好在我不用Powershell;P
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